2016-11-10 89 views
0

我刚开始使用Yii2。yii2:如何在模块中加载相对路径,动作,视图...

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

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

It show error: the view ROOT_PATH/views/site/index.php not found (note: ROOT_PATH is driectory in my local).

在init()函数在ROOT_PATH \模块\网站\ Module.php文件:我添加语句来测试:echo $this->getViewPath();

Result: ROOT_PATH\modules\Site\views

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

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

当我加入ROOT_PATH \模块\网站\ Module.php文件: Yii::$app->setLayoutPath($this->getLayoutPath()); 现在,它可以加载的actionIndex正确的看法。但是链接这种观点不工作:

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

HTML是generaated在前端:

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

为什么href是'/网站/约',我想这个值将是“网站/网站/关于”

回答

0

叫‘关于’链接,你有意见/站点创建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一次。

+0

我知道这一点。我不明白为什么它加载incrrect视图的actionIndex()。 –

0

所有模块在其模块路径中搜索视图模板。 所以,如果你有一个名为“网站”,并在模块内部模块一个名为控制器“SiteController”它搜索文件夹

ROOT_PATH\modules\site\views\site\

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

在视图中如果直接有控制器在在\控制器应用viewpath将

ROOT_PATH\modules\views\site\

ROOT_PATH\modules\views\[controlername]

a在始于/始于根的视图中的链接。在你的情况下,你只需要['about']链接到相同的控制器(和相同的模块)。

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

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

您可以找到有关路由和URL创建莅临指导:

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

+0

感谢您的回复。 我的模块结构: ROOT_PATH \ 模块\ 网站\ 控制器\ SiteController.php(具有的actionIndex) 意见\ 网站\ 的index.php 为什么在我的indexAction调用$这个 - >渲染(人指数“);它不加载正确。我加载ROOT_PATH \ views \ index.php –

相关问题