Предположим, вы получаете отчет о продажах из таблицы 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']
]);
}
Greg его то же самое мы можем создать защищенную функцию внутри класса Sales, которая вернет текст состояния. Выше я не создаю отдельную функцию, я просто добавляю условия в одни и те же функции. Он также отлично работает. – kantsverma
Ваше решение должно работать нормально. Это выглядит немного хрупким для меня, так как его нужно обновлять каждый раз, когда вы добавляете новое поле в таблицу. –
Greg Определенно, если в таблицу добавится новое поле, нам нужно будет добавить эти поля в контроллер и в модель. Я надеюсь, что это прекрасно. Есть ли другое решение для добавления новых полей в таблицу без добавления этих полей в модели, а также в контроллер? – kantsverma