我在主视图文件夹的layouts文件夹中有三个布局 . 我添加了一个名为subDomain的模块 . 在我的子域模块中,我有一个名为HomeController的Controller . 在HomeController中有一个名为 getDomain()
的动作 .
在 getDomain()
动作中,我想将主布局更改为 getDomainLayout
. 但是当我使用代码时出错:
$this->layout = "getDomainLayout";
Yii2投掷:
Invalid Parameter – yii\base\InvalidParamException
The view file does not exist: \myyii2\modules\subDomain\views\layouts\bersih.php
7 回答
您可以在控制器中设置变量 .
或者通过完整的路径
你可以添加$ this-> layout ='main';在模块init方法中 . main.php应位于布局下的modules视图文件夹内 .
如果您想在模块内默认设置它,您可以通过写入来完成
在模块类的
init()
函数内,您的完整代码如下所示您也可以在
construtor
中设置layout
属性,如下所示:有几种方法可以解决这个问题 .
在相应的模块目录中创建布局文件
下面的示例显示了某些
subDomain
模块的规范目录结构,包括它的布局(domain.php):遵循这个简单的结构,您可以在模块的控制器中按名称设置任何布局:
这是最优选的方式,因为模块是独立的软件单元,由其自己的模型,布局,控制器等组成 .
指定包含布局文件的目录的完整路径
在某些情况下,您可能希望使用位于模块目录之外的布局文件:
其中@app是当前运行的应用程序的基本路径,例如:
在这种情况下,请确保 main.php 布局文件存在于以下目录中:
如果我需要在控制器中使用不同的布局,我只需添加以下代码
确保您的布局存在于适当的文件夹中
在应用程序中使用不同布局的另一种便捷方法是创建一个抽象类 . 例如:
然后只需
extends
您的控制器 .