在cakephp中分配布局

时间:2011-09-15 06:00:02

标签: php cakephp cakephp-1.3

我们可以在那个特定的控制器中为整个控制器定义一个布局吗?我之前已经使用了appcontroller的过滤器之前用于此目的,但它不再解决它。所以我需要在控制器中有一些布局的定义将适用于该控制器的所有操作。

此致

4 个答案:

答案 0 :(得分:17)

使用它:

你的行动

$this->layout = 'mylayout';

您必须在view / layout / mylayout.ctp

中创建该布局

或将此功能添加到控制器以设置控制器的每个操作的布局

  function beforeFilter() {
    parent::beforeFilter();
        $this->layout = 'mylayout';
  }

答案 1 :(得分:6)

做这样的事情的最好方法

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布局

答案 2 :(得分:5)

CakePHP 3.0红色天鹅绒

布局文件位置:

enter image description here

新参数:

$this->viewBuilder()->layout("loginUI");

*" loginUI"是文件名布局

答案 3 :(得分:0)

是的,我们可以。您只需要在Template>> Layout>> yourlayout.ctp下创建布局文件 然后通过以下方式加载此布局以及控制器:

class MyController extends AppController {
    public function initialize(){
        parent :: initialize();
        $this->layout = "yourlayout";

      }
}

这将自动将此布局实现为Controller的默认布局。 你可能想要使用$ this-> viewBuilder-> layout(“yourlayout”);在initialize()内部,但它导致错误“在布尔值上调用成员函数布局()”。所以你可以使用前者。