yii2:如何加载相对路径,动作,视图…在模块


yii2: How to load relative path,action,view ... in module

我刚开始用Yii2。

------------- 题1:加载错误的看法 -----------------我有一个站点模块与SiteController和它的视图。

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

显示错误:视图ROOT_PATH/views/site/index.php没有找到(注意:ROOT_PATH是我本地的目录)

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

结果:ROOT_PATH '网站' '模块视图

我想问:为什么它不加载index.php在/modules/Site/views文件夹?(它加载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"

要调用" about "链接你必须在views/site中创建about.php并在sitcontroller

中创建一个名为actionAbout()的函数在sitecontroller

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

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

和加载视图问题检查你的配置文件和cookieValidationKey一次

所有模块在其模块路径中搜索视图模板。如果你有一个名为site的模块模块中有一个名为SiteController的控制器它会在文件夹

中搜索视图

ROOT_PATH'modules'site'views'site'

ROOT_PATH'modules'[modulename]'views'[controlername]

如果你在应用程序中直接在'controllers中设置控制器,则viewpath将是

ROOT_PATH'modules'views'site'

ROOT_PATH'modules'views'[controlername]

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

如果你链接到另一个模块中的控制器,你也必须给出模块名称,在你的情况下也是site

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

你可以在这里找到关于路由和URL创建的指南:

http://www.yiiframework.com/doc - 2.0/-指导-运行- routing.html