首页 > 解决方案 > CakePHP 3.x - 更改特定控制器的侧边栏

问题描述

我在 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在每一页上。它还允许我$lh_menu从我的 AppController 中传递一些数据 ( ):

// 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.ctpvia SubstanceViewController.php,但不确定这与通过 AppController 传递数据是否不同?

标签: cakephpcakephp-3.0

解决方案


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

在控制器中:

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

在布局中:

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

推荐阅读