【问题标题】:yii2: How to load relative path,action,view ... in moduleyii2:如何在模块中加载相对路径,动作,视图...
【发布时间】:2016-11-10 06:48:07
【问题描述】:

我刚刚开始使用 Yii2。

---------- 问题1:加载视图错误------ 我有一个带有 SiteController 的 Site 模块及其视图。

actionIndex(){
    $this->render('index');
}

它显示错误:视图 ROOT_PATH/views/site/index.php 未找到(注意:ROOT_PATH 在我的本地是 driectory)。

在 ROOT_PATH\modules\Site\Module.php 文件的 init() 函数中:我添加了要测试的语句:echo $this->getViewPath();

结果:ROOT_PATH\modules\Site\views

我想问:为什么它没有在/modules/Site/views 文件夹中加载index.php ??? (它将 index.php 加载到 ROOT_PATH\views 文件夹中,因此找不到该视图文件)

------------- 问题2:加载操作错误--------------

当我添加到 ROOT_PATH\modules\Site\Module.php 文件时: Yii::$app->setLayoutPath($this->getLayoutPath()); 现在它可以为 actionIndex 加载正确的视图。但是此视图的链接不起作用:

$menuItems = [
    ['label' => 'About', 'url' => ['/site/about']]
]

在前端生成 HTML:

<a href="/site/about">About</a>

为什么href是'/site/about',我希望这个值是"site/site/about"

【问题讨论】:

    标签: php module yii2


    【解决方案1】:

    要调用“关于”链接,您必须在视图/站点中创建 about.php,并在站点控制器中创建一个名称必须为 actionAbout() 的函数

    在站点控制器中

    public function actionAboute()
    {
    $this->render('about');
    }
    

    在 index.php 中

    <?= Html::a('About', ['value'=>Url::to('index.php?r=site/about')]) ?>
    

    对于加载视图问题,请检查您的配置文件和 cookieValidationKey 一次。

    【讨论】:

    • 我知道。我不明白为什么它会为 actionIndex() 加载错误的视图。
    【解决方案2】:

    所有模块在其模块路径中搜索视图模板。 因此,如果您有一个名为“site”的模块,并且在模块内有一个名为“SiteController”的控制器,它会搜索文件夹中的视图

    ROOT_PATH\modules\site\views\site\

    ROOT_PATH\modules\[modulename]\views\[controlername]

    如果您的应用程序中的控制器直接位于 \controllers 中,则视图路径将是

    ROOT_PATH\modules\views\site\

    ROOT_PATH\modules\views\[controlername]

    视图中以 / 开头的链接始终从根开始。在您的情况下,您只需要 ['about'] 链接到同一个控制器(和同一个模块)。

    如果您链接到另一个模块中的控制器,您还必须提供模块名称,在您的情况下也是 site

    ['/site/site/about'] 还将链接到站点模块中的站点控制器。但正如我上面提到的,如果您想链接到同一模块中的同一控制器,则不需要。

    您可以在此处找到有关路由和 URL 创建的指南:

    http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html

    【讨论】:

    • 感谢您的回复。我的模块结构:ROOT_PATH\modules\Site\controllers\SiteController.php(有 actionIndex)views\site\index.php 为什么在 indexAction 中我调用 $this->render('index');它不正确加载。我加载 ROOT_PATH\views\index.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多