【问题标题】:CakePHP - sending POST requests in cakephp API and data handlingCakePHP - 在 cakephp API 和数据处理中发送 POST 请求
【发布时间】:2013-08-20 20:37:38
【问题描述】:

我已经创建了一个 CakePHP 应用程序,并且在设置了 routes.php 文件之后,我可以发送 JSON 请求,以便将我的应用程序用作 API。为了测试,我创建了一个函数,如下所示:

public function api() {
    if($this->request->is('post')) {
        $data1 = (string)$this->request->data['Model']['data1'];
        $data2 = (string)$this->request->data['Model']['data2'];

        //logic goes here,it does stuff and $result is the variable where the result of the login is saved
        //$data1 and $data2 are used in the logic

        $result = 'result';
        $this->set('results',$result);
        $this->set('_serialize',array('results'));
    }

}

我还使用另一个名称创建了完全相同的函数,该函数旨在通过 Web 表单使用并且可以正常工作。但是,这段代码,在这里的这个函数,当我发布数据(我使用 Dev HTTP Client chrome 扩展)时,它返回 $results 变量为空,就像它没有收到我发送的内容:/ 我通过我使用的 chrome 扩展发送数据如下:

data1='stuff1'&data2='stuff2'

它只返回给我

{
"results":""
}

(同样的代码在没有 json 的情况下也能完美运行)。

我错过了什么吗?它似乎做错了什么吗?请帮我看看这里..

ps:如果您需要更多信息,请告诉我,我会发布它。

提前谢谢你!

【问题讨论】:

    标签: php json api post cakephp-2.0


    【解决方案1】:

    访问该帖子的正确方法是

    $this->request->data['data1'];
    

    要验证正在发送的数据,请执行以下操作:

    public function api() {
        //if($this->request->is('post')) {
            $data1 = (string)$this->request->data['Model']['data1'];
            $data2 = (string)$this->request->data['Model']['data2'];
    
            //logic goes here,it does stuff and $result is the variable where the result of the login is saved
            //$data1 and $data2 are used in the logic
    
            $result = 'result';
            //$this->set('results',$result);
            $this->set('results',array('root'=>$this->request);
            $this->set('_serialize',array('results'));
        //}
    }
    

    【讨论】:

    • 我所做的更改将允许您将所有请求对象视为 json 字符串。您将能够验证数据是如何传递的。
    • 是的,它返回给我这个:{"results":{"root":{"params":{"plugin":null,"controller":"mails","action":" api","named":[],"pass":[],"ext":"json","isAjax":false,"models":{"User":{"plugin":null,"className" :"User"}}},"data":null,"query":[],"url":"mails\/api.json","base":"","webroot":"\/", "here":"\/mails\/api.json"}}} 如您所见,“data”数组为空(null),因此我没有从 cakePHP 收到任何数据。为什么会这样? ://
    • 看起来问题可能出在 javascript 级别。让我们来看看。但请链接到pastebin :-)
    • 到目前为止我还没有创建任何JS,我只是通过Dev HTTP客户端测试我的api,chrome扩展......不是吗? ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多