我刚刚开始使用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”
答案 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