CakePHP 3.x-更改特定控制器的侧边栏

时间:2018-10-09 13:33:05

标签: cakephp cakephp-3.0

我在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的信息,但是这些示例并未显示如何将这些与控制器功能相关联-尚不清楚文档中的代码将放置在何处。

请问有人可以告诉我这是怎么做的吗?以后我还会有一个要求,将数据通过substance_sidebar.ctp传递到SubstanceViewController.php,并且不确定与通过AppController传递数据是否有所不同?

1 个答案:

答案 0 :(得分:1)

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

在控制器中:

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

在布局中:

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