首页 > yii 模块中的视图渲染问题

yii 模块中的视图渲染问题

namespace backend\modules\article\controllers;
use yii\web\Controller;
class ArticleController extends Controller
{

    public function actionCreate()
    {
        $module=\Yii::$app->controller->module;
        //echo $module->basePath;
        return $this->render('create');
    }

}

上面渲染视图,按理说默认应该渲染模块(Module)下面的布局文件backend/modules/article/views/layouts/main.php,然而实际上却是渲染的应用(Application)下面的backend/views/layouts/main.php。
但是在应用的模块配置下设置layout的属性却又是正常的了,设置的是默认的值。

'modules'=>[
        'article'=>[
            'class'=>'backend\modules\article\Module',
            'layout'=>'main'
        ]
    ],

请问这是怎么回事?


其实本质上得理解查找视图layout的机制。

在yii2中有几个地方可以设置layout选项:

所以最终都会调用Module::getLayoutPath() 这个方法来查找布局文件。

回到你的问题,当没有设置article/Module::$layout 的时候内部会冒泡去从父级module寻找设置了layout属性的父级Module,这最终会找到Application

那么已经知道会根据Module::basePath来查找视图所在的文件夹,那么顺理成章的就会出现你问题的那种现象了。

【热门文章】
【热门文章】