php - 在 yii2 中从模块 Controller 设置布局

标签 php layout views yii2

我在主视图文件夹中的布局文件夹中有三个布局。我添加了一个名为 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

在这种情况下,请确保 ma​​in.php 布局文件存在于以下目录中:

myApp/frontend/views/layouts/main.php

关于php - 在 yii2 中从模块 Controller 设置布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851718/

相关文章:

php - CakePHP 的型号名称错误

layout - 在 Webmatrix 中添加可重用的代码块

asp.net-mvc - 在 View 中使用 "ObjectName"而不是 "Namespace.ObjectName"

views - Laravel 4 Controller 模板/ Blade - 正确的方法?

php - 重定向路由以在 laravel 中进行验证

javascript - 我将 ajax 传递给 php,数据类型为 JSONP,但在 php 文件中显示 undefined index

php - 使用 Propel 在 Symfony2 中形成表格?

php - Javascript 或 PHP 中是否有用于定义自定义文档布局的 Canvas /布局编辑器?

css - 没有高度的 div - 如何让它们粘住并避免空白

android - 如何将布局从 xml 添加到 Extended FrameLayout Android?