1

我可以通过在 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')
        ));
    }

同样,我想实现addand edit,我可以在 HTTP 正文中以 Json 格式传递数据并将其存储/编辑到数据库中。

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

我无法理解如何使用

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

实现它。

4

2 回答 2

4

通过将 .json 附加到它,可以简单地按照文档中给出的方式使用 Add。您发布数据的 URL 将变为/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 也非常相似,除了它会检查数据是否存在,如果不存在,它将创建或修改现有数据。如果您还有任何疑问,请不要犹豫:)

于 2013-09-20T15:43:42.043 回答
1

链接文档中所述CakeRequest::input()读取原始输入数据,并可选择将其传递给解码函数。

所以$this->request->input('json_decode')给你解码的 JSON 输入,如果它的格式遵循Cake 约定,你可以简单地将它传递给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 约定,则必须相应地对其进行转换。

于 2013-09-20T11:04:03.457 回答