我在主视图文件夹中的布局文件夹中有三个布局。我添加了一个名为 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
最佳答案
有几种方法可以解决这个问题。
在合适的模块目录下创建布局文件
下面的示例显示了一些 subDomain
模块的规范目录结构,包括它的布局 (domain.php):
subDomain/
Module.php the module class file
controllers/ containing controller class files
HomeController.php the home controller class file
models/ containing model class files
views/ containing controller view and layout files
layouts/ containing layout view files
domain.php the domain layout file
home/ containing view files for HomeController
index.php the index view file
按照这个简单的结构,您可以在模块的 Controller 中通过名称设置任何布局:
namespace myApp\modules\subDomain\controllers;
class HomeController extends Controller {
public function actionGetDomain() {
$this->layout = 'domain'; // equals 'myApp/modules/subDomain/views/layouts/domain'
}
}
这是最可取的方式,因为模块是独立的软件单元,由自己的模型、布局、 Controller 等组成。
指定包含布局文件的目录的完整路径
在某些情况下,您可能希望使用位于模块目录之外的布局文件:
class HomeController extends Controller {
public function actionGetDomain() {
$this->layout = '@app/views/layouts/main';
}
}
哪里 @app 是当前运行的应用程序的基本路径,例如:
myApp/frontend
在这种情况下,请确保 main.php 布局文件存在于以下目录中:
myApp/frontend/views/layouts/main.php
关于php - 在 yii2 中从模块 Controller 设置布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851718/