【发布时间】:2015-10-18 20:36:29
【问题描述】:
我从 CakePhp 2.x 迁移到 CakePhp 3.x
在 CakePhp 2.x 中,在我的 ApiController 中,我可以这样做:
public function getScript(){
$this->layout = 'empty';
$this->ext = '.js';
}
上面的代码会呈现以下视图:
查看/Api/get_script.js (请注意 .js 扩展名)
如何使用 CakePhp 3.x 实现相同的行为?
我在文档中读到:
Controller::$ext 属性已被移除。如果要使用非默认视图文件扩展名,现在必须扩展和覆盖 View::$_ext 属性。
但我不明白如何以及在何处扩展 View::$_ext 属性
我尝试了以下方法:
我在 src/View/ApiView.php 中新建了一个 View 类
namespace App\View;
use Cake\View\View;
class ApiView extends View
{
protected $_ext = '.js';
}
在我的控制器中:
public function getScript(){
$this->viewClass='Api';
$this->layout = 'ajax';
}
但现在我收到以下错误:
错误:布局文件 Layout/ajax.js 找不到或没有 存在。
这很有意义,因为我告诉 CakePhp 使用 .js 作为默认扩展名。但我想为布局使用 .ctp 扩展名,为模板视图使用 .js 扩展名。
在 CakePHP 2.x 中它是如此简单我相信在 CakePHP3.x 中也一定有一个简单的解决方案..请帮助!
谢谢
【问题讨论】:
-
这意味着通过创建
WhateverView- 并使用该类。 -
这就是我想要做的......但我无法覆盖 _ext 属性(它不起作用),我需要一些示例代码
-
如果您有一些示例代码,请将其放在问题中 - 您似乎不太可能按照说明的建议进行操作。
-
我尝试了不同的方法。我已经编辑了问题并添加了迄今为止给出最接近解决方案的代码。但我仍然没有得到我想要的..
标签: php cakephp cakephp-3.0