cakephp - 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.ctp
via SubstanceViewController.php
,但不确定这与通过 AppController 传递数据是否不同?
解决方案
我的建议是beforeFilter
在你的 中添加一个函数SubstanceViewController
,这将set
是你的布局检查的标志。
在控制器中:
$this->set('use_substance_sidebar', true);
parent::beforeFilter($event);
在布局中:
if (isset($use_substance_sidebar) && $use_substance_sidebar) {
...
}
推荐阅读
- php - WooCommerce 批量更新/创建 webhook 不起作用
- file - jmeter 仅以 PDF 格式下载所有文件,即使所有文件都不是 PDF 格式
- java - OkHttp 加载签名证书
- python - ModuleNoFoundError:尝试运行 Flask 应用程序时没有名为“stuff”的模块异常
- javascript - 无法使用 jQuery 设置多个属性
- sitefinity - Sitefinity 动态模块字段自定义验证
- sql - 将基于间隔的表拆分为每日数据
- matlab - 按行而不是按列将矩阵写入文本文件
- python - 在 Python 中的 .csv 文件中为每条记录保存一个新的 .tsv 文件
- android - Android UIAutomator 2 如何在没有 WRITE_EXTERNAL_STORAGE 权限的情况下在 App 上截屏?