【发布时间】:2011-09-15 06:00:02
【问题描述】:
我们可以在那个特定的控制器中为整个控制器定义一个布局吗?我之前已经为此目的使用了 appcontroller 的过滤器,但它不再解决它。所以我需要在控制器中定义一些布局将适用于该控制器的所有操作。
问候
【问题讨论】:
标签: php cakephp cakephp-1.3
我们可以在那个特定的控制器中为整个控制器定义一个布局吗?我之前已经为此目的使用了 appcontroller 的过滤器,但它不再解决它。所以我需要在控制器中定义一些布局将适用于该控制器的所有操作。
问候
【问题讨论】:
标签: php cakephp cakephp-1.3
使用它:
在你的行动中
$this->layout = 'mylayout';
您必须在 view/layout/mylayout.ctp 中创建该布局
或者将此函数添加到控制器中,为控制器的每个动作设置布局
function beforeFilter() {
parent::beforeFilter();
$this->layout = 'mylayout';
}
【讨论】:
做这样的事情的最好方法
var $layout = 'my_account';
这将应用于您的整个控制器。 添加此代码后,它将看起来像这样。
class MyAccountsController extends AppController {
var $name = 'MyAccounts';
var $components = array('Email');
var $layout = 'my_account';
如果您不想使用某些操作,您可以像这样在您的操作中明确定义
function my_action(){
$this->layout = 'another_layout';
}
现在这个my_action 将采用另一个布局,其余操作将采用my_account 布局
【讨论】:
是的,我们可以。您只需要在 Template>>Layout>>yourlayout.ctp 下创建布局文件 然后通过以下方式将该布局与控制器一起加载:
class MyController extends AppController {
public function initialize(){
parent :: initialize();
$this->layout = "yourlayout";
}
}
这将自动实现此布局作为控制器的默认布局。 你可能想使用 $this->viewBuilder->layout("yourlayout");在 initialize() 内部,但会导致错误“在布尔值上调用成员函数 layout()”。因此,您可以使用前者。
【讨论】: