我們可以在xml響應中設置條件嗎?好像有在數據庫是像0,1,2,3數值狀態字段,我們要顯示它像下面CakePHP 3.0 REST API在API響應中添加條件
0 for => Complete
2 for => Cancelled
2 for => Return
5 for => Refund.
,我們怎樣才能XML響應添加一個新的領域,如果不存在的字段在數據庫中?
我們可以在xml響應中設置條件嗎?好像有在數據庫是像0,1,2,3數值狀態字段,我們要顯示它像下面CakePHP 3.0 REST API在API響應中添加條件
0 for => Complete
2 for => Cancelled
2 for => Return
5 for => Refund.
,我們怎樣才能XML響應添加一個新的領域,如果不存在的字段在數據庫中?
讓我們假設你正在從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']
]);
}
如果您能夠接受在XML中的地位具有略微不同的名稱,你可以創建稱爲虛擬領域,例如,STATUS_TEXT。在您的Sale實體類中添加一個protected function _getStatusText
,該實體類根據狀態整數返回所需的文本,並將protected $_virtual = ['status_text'];
添加到Sale類,並且您應該開始在XML中獲取狀態文本。
格雷格它的同樣的事情,我們可以在Sales類中創建一個受保護的函數,它將返回狀態文本。上面我不創建單獨的功能,我只是在相同的功能添加條件。它也工作正常。 – kantsverma
您的解決方案應該可以正常工作。它對我來說看起來有點脆弱,因爲無論何時向表中添加一個新字段,它都需要更新。 –
Greg絕對是否會在表中添加任何新字段,我們應該需要在控制器和模型中添加該字段。我希望它很好,是否有任何其他解決方案在表中添加新字段,而無需在模型和控制器中添加字段? – kantsverma