Cakephp 3:Json呈现视图不工作

Cakephp 3:Json呈现视图不工作,php,ajax,json,cakephp,Php,Ajax,Json,Cakephp,我一直在尝试在CakePHP3.0.11中设置一个Ajax调用。 我按照这里的解释: 在路由中启用Json(但我不确定这是否有用): 我已经在控制器中设置了示例: $returnObject = new ObjectReturn(); $this->set('returnObject', $returnObject); $this->set('_serialize', ['returnObject']); 但当我调用ajax时,我得到了: { "message": "Tem

我一直在尝试在CakePHP3.0.11中设置一个Ajax调用。 我按照这里的解释:

在路由中启用Json(但我不确定这是否有用):

我已经在控制器中设置了示例:

$returnObject = new ObjectReturn();
$this->set('returnObject', $returnObject);
$this->set('_serialize', ['returnObject']);
但当我调用ajax时,我得到了:

{
    "message": "Template file \Pages\\score.ctp\ is missing.",
    "url": "\/pages\/score",
    "code": 500
}
如果我创建了页面,他只会呈现一些html,并将default.ctp作为布局。这里怎么了


非常感谢

如果您想强制每个响应(错误除外)都使用JSON(并跳过模板),可以将此代码放在AppController.php中

public function initialize()
{
    parent::initialize();
    $this->loadComponent('RequestHandler');
}

public function beforeRender(Event $event)
{
    $this->RequestHandler->renderAs($this, 'json');
    $this->response->type('application/json');
    $this->set('_serialize', true);
}
这将加载RequestHandlerComponent,强制呈现为JSON,强制响应类型为JSON,并使用模板跳过


手册中的更多内容:

要在cakephp 3应用程序中实现json/xml呈现视图,需要在应用程序中编辑两个文件

  • AppController.php
  • 编辑初始化函数如下所示

    public function initialize() {
        parent::initialize();
        $this->loadComponent('RequestHandler');/*This line loads the required RequestHandler Component*/
    }
    
    Router::scope('/', function ($routes) {
        $routes->extensions(['json', 'xml', 'ajax']);
        /*Other route definitions as already existing*/
    }
    
  • routes.php(在您的配置文件夹下)
  • 将Router::scope()编辑为如下所示

    public function initialize() {
        parent::initialize();
        $this->loadComponent('RequestHandler');/*This line loads the required RequestHandler Component*/
    }
    
    Router::scope('/', function ($routes) {
        $routes->extensions(['json', 'xml', 'ajax']);
        /*Other route definitions as already existing*/
    }
    
    现在可以通过向通常加载html的链接添加.json或.xml来加载json视图


    干杯

    您是否按照说明在控制器中加载了
    RequestHandlerComponent
    ?和b.t.w,要使用扩展名和请求处理启用
    json
    查看,您的url需要使用
    .json
    扩展名,例如
    /pages/score.json
    。您好,谢谢您的回答。我已经升级到Cake的最新版本,现在它可以工作了。也许一个错误是正确的。谢谢你的回答!由于以下原因,当您升级时,这一点起作用:
    从3.1.0 AppController开始,在应用程序框架中自动将“\u serialize”=>true添加到所有XML/JSON请求中。如果要使用查看文件,需要从beforeRender回调中删除此代码。
    非常感谢!!我疯狂地想要输出json!!似乎是设置
    $this->set(“\u serialize',$vars)是不够的!!提示:同样适用于CakePHP2!