如何使用PUT在CakePhp Restful API中获取Json输入

时间:2013-09-20 09:23:34

标签: php json api rest cakephp

我可以通过以URl格式传递ID来viewdelete数据:

/apis/view/id.json

使用:

public function view($id) {
        $api = $this->Api->findById($id);
        $this->set(array(
            'api' => $api,
            '_serialize' => array('api')
        ));
    }

同样,我想实现addedit,我可以在HTTP体中以Json格式传递数据并在数据库中存储/编辑它。

我无法遵循此解决方案: CakePHP API PUT with JSON input

我无法理解如何使用

$data = $this->request->input('json_decode');

实现它。

2 个答案:

答案 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约定,则必须相应地对其进行转换。