2016-11-22 4 views
0

Можем ли мы установить условия в xml-ответе. Как есть поля состояния в базе данных, в числовом как 0,1,2,3, и мы хотим показать, как показано нижеCakephp 3.0 REST API добавляет условия в ответ API

0 for => Complete 
2 for => Cancelled 
2 for => Return 
5 for => Refund. 

Как мы можем добавить новые поля в ответ XML, если поля не существует в базе данных?

ответ

0

Предположим, вы получаете отчет о продажах из таблицы Sales в Cakephp 3.0. Используя API для отдыха. Если вы хотите настроить, переименовать, добавить несколько полей в ответ на Rest API Вы можете сделать это, как показано ниже

REST API URL будет что-то вроде ниже

https://example.com/api/index.json?fromdate_utc=2016-10-03&todate_utc=2016-10-03 

И functino контроллер быть что-то, как показано ниже : -

public function index($fromdate = null, $todate = null) 
    { 
     //set date range for 
     if(!empty($_GET['fromdate_utc']) && !empty($_GET['todate_utc'])){ 
      // if from amd to date are same add +1 day in to date to get result 
      $to_date = date('Y-m-d', strtotime($_GET['todate_utc'] . ' +1 day')); 
      $dateRage = array('Sales.SalesDate >= ' => $_GET['fromdate_utc'], 'Sales.SalesDate <=' => $to_date); 
     }else{ 
      $dateRage = array();      
     } 

     $conditions = array(
      'and' => array($dateRage), 
     ); 

     //$this->Auth->allow(); 
     $sales = $this->Sales->find('all', array(
         'conditions' => $conditions 
        )) 
        ->select(['SalesNo', 'SalesDate', 'TotalValue', 'TotalDiscount', 'NetTotal', 'PaymentMode', 'Status']) 
        ->where(['StoreId' => '8','Status !=' => '2','Status !=' => '4'])->andWhere(['Status !=' => 1])->andWhere(['Status !=' => 4]); 
        //->limit(3); 
     $salesResponse = array(); 
     //echo '<br/>Count no of output => '.$sales->count(); 
     if($sales->count() >0){ 
      foreach($sales as $key=>$salesData){ 
       //re generate the array as per your requirements 
       $salesResponse[$key]['SalesNo']   = $salesData->SalesNo; 
       $salesResponse[$key]['SalesDate'] = $salesData->SalesDate; 
       $salesResponse[$key]['TotalValue']  = $salesData->TotalValue; 
       $salesResponse[$key]['TotalDiscount'] = $salesData->TotalDiscount; 
       $salesResponse[$key]['NetTotal']  = $salesData->NetTotal; 
       $salesResponse[$key]['SaleTax']   = 0; // add new fields that does not exist in database 
       $salesResponse[$key]['PaymentMode']  = $salesData->PaymentMode; 
       // change the status from numeric to character and pass it to response 
       if($salesData->Status == 5){ 
        $salesResponse[$key]['Status']  = 'Refund'; 
       }elseif($salesData->Status == 3){ 
        $salesResponse[$key]['Status']  = 'Return'; 
       }elseif($salesData->Status == 2){ 
        $salesResponse[$key]['Status']  = 'Cancelled'; 
       }elseif($salesData->Status == 0){ 
        $salesResponse[$key]['Status']  = 'Complete'; 
       } 
      } 
     }else{ 
      $salesResponse = array('Error ! sorry not found any record.'); 
     } 

     $this->set([ 
      'sales' => $salesResponse, 
      '_serialize' => ['sales'] 
     ]); 
    } 
0

Если ты в порядке с наличием немного другое имя для статуса в XML, вы можете создать виртуальное поле с именем, например, status_text. Добавьте protected function _getStatusText в свой класс сущности продажи, который возвращает нужный текст на основе целочисленного состояния, а также добавит protected $_virtual = ['status_text']; в класс Sale, и вы должны начать получать текст состояния в своем XML.

+0

Greg его то же самое мы можем создать защищенную функцию внутри класса Sales, которая вернет текст состояния. Выше я не создаю отдельную функцию, я просто добавляю условия в одни и те же функции. Он также отлично работает. – kantsverma

+0

Ваше решение должно работать нормально. Это выглядит немного хрупким для меня, так как его нужно обновлять каждый раз, когда вы добавляете новое поле в таблицу. –

+0

Greg Определенно, если в таблицу добавится новое поле, нам нужно будет добавить эти поля в контроллер и в модель. Я надеюсь, что это прекрасно. Есть ли другое решение для добавления новых полей в таблицу без добавления этих полей в модели, а также в контроллер? – kantsverma