yii2:如何在模块

时间:2016-11-10 06:48:07

标签: php module yii2

我刚刚开始使用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 ??? (它在ROOT_PATH \ views文件夹中加载index.php,因此找不到该视图文件)

-------------问题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”

2 个答案:

答案 0 :(得分:0)

致电&#39;关于&#39;链接你必须在views / site中创建about.php并创建一个函数,其名称必须是sitecontroller中的actionAbout()

在sitecontroller中

public function actionAboute()
{
$this->render('about');
}
index.php中的

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

并且对于加载视图问题,请检查一下配置文件和cookieValidationKey。

答案 1 :(得分:0)

所有模块在其模块路径中搜索视图模板。 所以如果你有一个名为&#34; site&#34;在模块内部有一个名为&#34; SiteController&#34;它搜索文件夹中的视图

ROOT_PATH\modules\site\views\site\

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

如果您在应用程序中直接拥有控制器,则视图路径将为

ROOT_PATH\modules\views\site\

ROOT_PATH\modules\views\[controlername]

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

如果您链接到另一个模块中的控制器,您还必须提供模块名称,该名称也在您的案例中site

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

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

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