2016-11-22 79 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

讓我們假設你正在從CakePHP 3.0的Sales表中獲取銷售報表使用rest 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。在您的Sale實體類中添加一個protected function _getStatusText,該實體類根據狀態整數返回所需的文本,並將protected $_virtual = ['status_text'];添加到Sale類,並且您應該開始在XML中獲取狀態文本。

+0

格雷格它的同樣的事情,我們可以在Sales類中創建一個受保護的函數,它將返回狀態文本。上面我不創建單獨的功能,我只是在相同的功能添加條件。它也工作正常。 – kantsverma

+0

您的解決方案應該可以正常工作。它對我來說看起來有點脆弱,因爲無論何時向表中添加一個新字段,它都需要更新。 –

+0

Greg絕對是否會在表中添加任何新字段,我們應該需要在控制器和模型中添加該字段。我希望它很好,是否有任何其他解決方案在表中添加新字段,而無需在模型和控制器中添加字段? – kantsverma