我可以通过以URl格式传递ID来view
和delete
数据:
/apis/view/id.json
使用:
public function view($id) {
$api = $this->Api->findById($id);
$this->set(array(
'api' => $api,
'_serialize' => array('api')
));
}
同样,我想实现add
和edit
,我可以在HTTP体中以Json格式传递数据并在数据库中存储/编辑它。
我无法遵循此解决方案: CakePHP API PUT with JSON input
我无法理解如何使用
$data = $this->request->input('json_decode');
实现它。
答案 0 :(得分:4)
添加可以简单地通过将.json附加到文档中来使用。您发布数据的网址将为/apis.json
。这将自动访问add()方法。
假设您以以下格式传递json值电子邮件和密码:{"email":"abc@def.com","password":"123456"}
public function add(){
$data=$this->request->input('json_decode', true ); //$data stores the json
//input. Remember, if you do not add 'true', it will not store in array format.
$data = $this->Api->findByEmailAndPassword($data['email'],$data['password']);
//simple check to see if posted values match values in model "Api".
if($data) {$this->set(array(
'data' => $data,
'_serialize' => array('data')));}
else{ $this->set(array(
'data' => "sorry",
'_serialize' => array('data')));}
}// The last if else is to check if $data is true, ie. if value matches,
// it will send the input values back in JSON response. If the email pass
// is not found, it will return "Sorry" in json format only.
希望能回答你的问题! Put也非常相似,除了它将检查数据是否存在,如果它不会创建,否则它将修改现有数据。如果您有任何疑问,请不要犹豫:)
答案 1 :(得分:1)
如the linked documentation中所述,CakeRequest::input()
读取原始输入数据,并可选择将其传递给解码函数。
因此,$this->request->input('json_decode')
为您提供已解码的JSON输入,如果格式化为the Cake conventions,您只需将其传递给Model
保存方法之一。
这是一个非常基本的(未经测试的)示例:
public function add()
{
if($this->request->is('put'))
{
$data = $this->request->input('json_decode', true);
$api = $this->Api->save($data);
$validationErrors => $this->Api->validationErrors;
$this->set(array
(
'api' => $api,
'validationErrors' => $validationErrors,
'_serialize' => array('api', 'validationErrors')
));
}
}
这将尝试保存数据并返回保存结果以及可能的验证错误。
如果输入数据的格式不符合Cake约定,则必须相应地对其进行转换。