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

我能够查看</ code>和删除</ code>数据 在URl中传递ID的格式为:</ p>

  /apis/view/id.json
</ code> </ pre>

使用: </ p>

 公共功能视图($ id){
$ api = $ this-&gt; Api-&gt; findById($ id);
$ this-&gt; set (array(
'api'=&gt; $ api,
'_serialize'=&gt; array('api')
));
}
</ code> </ pre>

类似地,我想实现 add </ code>和 edit </ code>,我可以在HTTP体中以Json格式传递数据并在数据库中存储/编辑它。 </ p>

我无法遵循此解决方案:
带有JSON输入的CakePHP API PUT </ p>

我无法理解如何使用</ p>

  $ data = $ this  - &gt; request-&gt; input('json_decode'); 
</ code> </ pre>

实现它。</ p>
</ div>

展开原文

原文

I am able to view and delete the data by passing ID in the URl in format of:

/apis/view/id.json

using:

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

Similarly I want to implement add and edit, where I can pass data in Json format in the HTTP body and store/edit it in the database.

I couldn't follow the this solution: CakePHP API PUT with JSON input

I couldn't understand how to use

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

to achieve it.

douzhi3667
douzhi3667 如果你看看CakeRequest是如何工作的,我认为你会遇到其他问题你可以看到,如果你将有效负载作为Content-Type:application/json发送,那么这个开箱即用是不可能的,所以你可能需要更多工作那。您可以查看我们最近开源的一些插件github.com/Wizehive/cakephp-api-utils
大约 7 年之前 回复
dragon19720808
dragon19720808 谢谢@ndm。我正在使用2.0
大约 7 年之前 回复
duanjuete9206
duanjuete9206 请始终提及您正在使用的CakePHP版本。
大约 7 年之前 回复

2个回答



Add可以简单地通过将.json附加到文档中来使用。 发布数据的URL将变为 /apis.json </ code>。 这将自动访问add()方法。</ p>

假设您以下列格式传递json值电子邮件和密码: {“email”:“abc@def.com”,“ 密码“:”123456“} </ code> </ p>

  public function add(){

$ data = $ this-&gt; request-&gt; input(' json_decode',true); // $ data存储json
//输入。 请记住,如果您不添加'true',它将不会以数组格式存储。

$ data = $ this-&gt; Api-&gt; findByEmailAndPassword($ data ['email'],$ data ['password ']);
//简单检查发布的值是否与模型“Api”中的值匹配。

if($ data){$ this-&gt; set(array(
'data'=&gt; $ data,
'_serialize'=&gt; array('data')));}
else { $ this-&gt; set(array(
'data'=&gt;“sorry”,
'_serialize'=&gt; array('data')));}

} //最后一个if else 是检查$ data是否为真,即。 如果值匹配,
//它将在JSON响应中返回输入值。 如果未找到电子邮件传递
//,它将仅以json格式返回“抱歉”。
</ code> </ pre>

希望能回答您的问题! Put也非常相似,除了它将检查数据是否存在,如果它不会创建,否则它将修改现有数据。 如果您有任何疑问,请不要犹豫:)</ p>
</ div>

展开原文

原文

Add can simply be used as given in documentation by appending .json to it. The URL at which you post the data will become /apis.json. This will automatically access the add() method.

Assuming you pass json values email and password in such format: {"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.

Hope that answers your question! Put is also very similar, except it will check if the data exists, if it doesn't it will create or else it will modify existing data. If you have any further doubts don't hesitate to ask :)

doubi1931
doubi1931 只是做同样的事情,如果formhelper找到一个已填充的字段,它将自动假定需要编辑。 这是链接:book.cakephp.org/2.0/en/core-libraries/helpers/form.html查看您将理解的内容。 :)
接近 7 年之前 回复
dongyu1614
dongyu1614 嗨,谢谢@Anugrah! 评论SavedByEmail ..行并添加:$ this-> Api-> create(); $这 - > API->保存($数据); 数据正在推向数据库。 如何填充数据库中的crated和modified字段?
接近 7 年之前 回复



链接文档 CakeRequest :: input()</ code>读取原始输入数据,并可选择通过它 一个解码函数。</ p>

所以 $ this-&gt; request-&gt; input('json_decode')</ code>为你提供解码的JSON输入,以防它的格式化 遵循蛋糕约定,您只需将其传递给 Model </ code>保存方法之一。</ p>

这是一个非常基本的(未经测试的)示例:</ p>

  public function add  ()
{
if if($ this-&gt; request-&gt; is('put'))
{
$ data = $ this-&gt; request-&gt; input('json_decode',true) ;

$ api = $ this-&gt; Api-&gt; save($ data);
$ validationErrors =&gt; $ this-&gt; Api-&gt; validationErrors;

$ this-&gt; set(array

'api'=&gt; $ api,
'valid validationErrors'=&gt; $ validationErrors,
'_serialize'=&gt;数组('api','validationErrors')
));
}
}
</ code> </ pre>

这将尝试保存 如果输入数据的格式不符合</ em> 约 必须相应地改变它。</ p>
</ div>

展开原文

原文

As explained in the linked documentation, CakeRequest::input() reads the raw input data, and optionally passes it through a decoding function.

So $this->request->input('json_decode') gives you the decoded JSON input, and in case it's formatting follows the Cake conventions, you can simply pass it to one of Model save methods.

Here's a very basic (untested) example:

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')
        ));
    }
}

This will try to save the data and return the save result as well as possible validation errors.

In case the formatting of the input data doesn't follow the Cake conventions, you'll have to transform it accordingly.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问