model-view-controller - 为 yii2 中的所有模块创建通用页眉页脚
问题描述
我在 Yii2 框架上构建了一个应用程序,它具有以下结构
assets/
config/
controllers/
models/
modules/
|
-- module-1
|
- controllers
- models
- views
|
- header.php
- footer.php
-- module-2
|
- controllers
- models
- views
|
- header.php
- footer.php
views/
|
- layouts/
|
- header.php
- footer.php
- main.php
web/
我的应用程序有 3 个模块,其中 2 个模块构建为模块并称为 so,1 个模块使用 Yii2 的默认控制器、模型、视图结构并称为 so,但所有 3 个模块都具有相同的页眉页脚,但位于应用程序中的 3 个不同位置并调用为如上结构所示。如果用户想要编辑页眉或页脚,他必须在 3 个不同的地方更改相同的代码,这不是一个好习惯,我在这里想要的是所有 3 个模块必须共享一个公共的页眉页脚。我搜索了一个解决方案,但没有找到正确的答案,我是 Yii 框架的初学者。谁能告诉我如何实现这一目标?谢谢。
解决方案
通常处理共享视图的最佳方法是将它们提取到小部件。它提供了更好的封装,并且在将来扩展它(例如通过添加一些设置)比直接包含视图要容易得多。
创建FooterWidget
并HeaderWidget
呈现您的视图,并在布局中调用它:
<?= HeaderWidget::widget() ?>
当您需要设置时:
<?= HeaderWidget::widget([
'facebookUrl' => 'someURL',
]) ?>
推荐阅读
- javascript - 如何根据 html 中的另一个选择选项来操作选择选项?
- artifactory - 部署文件时,Artifactory repo 文件夹结构与预期不符
- mysql - MySQL:无法通过编辑 my.ini / my.cnf 来增加 innodb_buffer_pool_size
- laravel - Laravel 在共享主机中显示图像
- c++ - Valgrind 标志,调试与发布编译
- amazon-web-services - Alexa Skill 中是否需要自定义槽值?
- apache-spark - Parquet 在 Spark 上写入 OutOfMemoryException
- ios - 在 swift 4 中使用 Anyhashable 中的副本
- php - 如何在 Typo3 的默认存储库功能中设置排序?
- validation - Laravel 为系统中的所有日期字段设置了一个通用的验证器