首页 > 解决方案 > 为 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 框架的初学者。谁能告诉我如何实现这一目标?谢谢。

标签: model-view-controllerviewyii2headerfooter

解决方案


通常处理共享视图的最佳方法是将它们提取到小部件。它提供了更好的封装,并且在将来扩展它(例如通过添加一些设置)比直接包含视图要容易得多。

创建FooterWidgetHeaderWidget呈现您的视图,并在布局中调用它:

<?= HeaderWidget::widget() ?>

当您需要设置时:

<?= HeaderWidget::widget([
    'facebookUrl' => 'someURL',
]) ?>

推荐阅读