Mau*_*suf 13 php layout views yii2
我在主视图文件夹的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
Run Code Online (Sandbox Code Playgroud)
Ole*_*hov 21
有几种方法可以解决这个问题.
下面的示例显示了某个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
Run Code Online (Sandbox Code Playgroud)
遵循这个简单的结构,您可以在模块的控制器中按名称设置任何布局:
namespace myApp\modules\subDomain\controllers;
class HomeController extends Controller {
public function actionGetDomain() {
$this->layout = 'domain'; // equals 'myApp/modules/subDomain/views/layouts/domain'
}
}
Run Code Online (Sandbox Code Playgroud)
这是最优选的方式,因为模块是独立的软件单元,由其自己的模型,布局,控制器等组成.
在某些情况下,您可能希望使用位于模块目录之外的布局文件:
class HomeController extends Controller {
public function actionGetDomain() {
$this->layout = '@app/views/layouts/main';
}
}
Run Code Online (Sandbox Code Playgroud)
其中@app是当前运行的应用程序的基本路径,例如:
myApp/frontend
Run Code Online (Sandbox Code Playgroud)
在这种情况下,请确保main.php布局文件存在于以下目录中:
myApp/frontend/views/layouts/main.php
Run Code Online (Sandbox Code Playgroud)
如果我需要在控制器中使用不同的布局,我只需添加以下代码
public function beforeAction($action)
{
$this->layout = 'layout'; //your layout name
return parent::beforeAction($action);
}
Run Code Online (Sandbox Code Playgroud)
确保您的布局存在于适当的文件夹中
'@app/views/layouts/layout.php'
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以在控制器中设置变量。
class DefaultController extends Controller
{
public $layout = 'main.php';
}
Run Code Online (Sandbox Code Playgroud)
或者通过传递完整路径
public $layout = '@frontend/modules/idModule/views/layouts/main.php';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32205 次 |
| 最近记录: |