【问题标题】:Assigning Layout in cakephp在 cakephp 中分配布局
【发布时间】:2011-09-15 06:00:02
【问题描述】:

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

问候

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

    使用它:

    在你的行动中

    $this->layout = 'mylayout';
    

    您必须在 view/layout/mylayout.ctp 中创建该布局

    或者将此函数添加到控制器中,为控制器的每个动作设置布局

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

    【讨论】:

    • 是的,我已经这样做了。在发布了thanx sukinsan的问题后,这让我很震惊。
    【解决方案2】:

    做这样的事情的最好方法

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

    【讨论】:

      【解决方案3】:

      对于 CakePHP 3.0 Red Velvet

      布局文件位置:

      新参数:

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

      *“loginUI”为文件名布局

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多