【问题标题】:CakePHP 'autoRender = false' does not working. Still gives missing view errorCakePHP 'autoRender = false' 不起作用。仍然给出缺少视图错误
【发布时间】:2015-07-02 15:02:01
【问题描述】:

我正在使用 cakephp 2.0.4(在现有项目中进行更改)

我的控制器功能是..

class PagesController extends AppController {
    public function getlocations($string = ''){
        $this->autoRender = false;             
        $aResult = array(0=>'Florida', 1=>'London');
        echo json_encode($aResult);
    }
}

我也尝试过 $this->autoLayout = $this->autoRender = false;

当我在浏览器 mysite/app/pages/getlocations 中直接调用此操作时,会出现以下错误

View file "/home/mysite/public_html/testing/app/View/Pages/g.ctp" is missing.

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    创建/View/Ajax/json.ctp 视图:

    <?php
    if(!empty($data)) echo json_encode($data);
    

    那么在行动中:

    $this->set('data', array(0=>'Florida', 1=>'London'));
    $this->layout = false;
    $this->render('/Ajax/json');
    

    【讨论】:

    • 这是一个很好的答案,因为它使用 View 而不是 Controller 来输出内容。这就是 Cake 应该被使用的方式。
    【解决方案2】:

    你也可以按照 Cake 的方式让它工作。

    首先您必须将以下代码添加到您的路由文件中:

    Router::parseExtensions('json');
    

    接下来,在控制器中将“RequestHandler”添加到您的组件数组中,并在您的 getlocations 函数中序列化您的结果:

    public $components = array('RequestHandler');
    
    public function getlocations($string = ''){
        $this->set('aResult', array(0=>'Florida', 1=>'London'));
        $this->set('_serialize', 'aResult');
    }
    

    最后,您可以在浏览器中看到结果mysite/app/pages/getlocations.json

    这样做,CakePHP 将自动添加 application/json 标头。

    更多信息:http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多