【问题标题】:CakePHP 3.x - change sidebar for a specific controllerCakePHP 3.x - 更改特定控制器的侧边栏
【发布时间】:2018-10-09 13:33:05
【问题描述】:

我有一个使用 CakePHP 3.5.13 的应用程序,它具有左侧导航菜单。

在我的Template/Layout/default.ctp 我有这个:

<body>
    <?= $this->element('left_sidebar', ['lh_menu' => $lh_menu, 'cache' => true]);?>

    <?= $this->fetch('content') ?>
</body>

这会在每一页上呈现Template/Element/left_sidebar.ctp。它还允许我从我的 AppController 传递一些数据 ($lh_menu):

// src/Controller/AppController.php
public function beforeFilter(Event $event) 
{
    // $lh_menu is some data from a DB used to populate a navigation menu
    $this->set('lh_menu', $lh_menu);
}

我最近添加了一个新控制器(称为SubstanceViewController.php),并希望为该控制器内的所有功能使用不同的左侧菜单(Template/Element/substance_sidebar.ctp)。我已经阅读了有关使用 View Blocks 的信息,但示例没有显示如何将这些与控制器功能相关联 - 目前尚不清楚文档中的代码将放置在何处。

请有人告诉我这是如何完成的吗?稍后我还需要通过SubstanceViewController.php 将数据传递给substance_sidebar.ctp,但不确定这与通过AppController 传递数据是否不同?

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    我的建议是在您的SubstanceViewController 中添加一个beforeFilter 函数,这将使set 成为您的布局检查的标志。

    在控制器中:

    $this->set('use_substance_sidebar', true);
    parent::beforeFilter($event);
    

    在布局中:

    if (isset($use_substance_sidebar) && $use_substance_sidebar) {
        ...
    }
    

    【讨论】:

    • 我设法使用了它,但已将其放入 SubstanceViewController.php 中的 initialize() 方法中,而不是 beforeFilter() 方法中。
    • 任何一种方式都可以; beforeFilter 与现有代码更加对称,因此从长远来看可能更易于维护。
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多