如何在Yii2中更改默认视图路径?

时间:2014-11-19 23:03:38

标签: php yii2

我正在尝试在advanced-yii2中做多主题。 我为此尝试了很多方法,但它不起作用我无法理解。 首先,我将其添加到" frontend / config / main.php&#34 ;;

          'view' => [
              'theme' => [
                 'pathMap' => [ 
                    '@app/views' => [ 
                        '@webroot/themes/demo/views',

                     ]
                 ],
               ],
            ],

并且它不起作用,然后我尝试为前端创建一个新的视图类,例如:

    namespace frontend\components;

class NewsView extends \yii\web\View {

    function init() {
    \Yii::$app->view->viewPath = '@webroot/themes';
    parent::init();
    }

}

并在config.php中添加

'view' => [
        'class' => 'frontend\components\NewsView',

但它也不起作用。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

您可以在基本控制器上重新定义getViewPath方法。像

public function getViewPath()
{
    return Yii::getAlias('@frontend/views/newview');
}

答案 1 :(得分:0)

在控制器中,您也可以使用init方法更改视图路径:

public function init() {
    parent::init();
    $this->viewPath = '@frontend/views/newview'; // or before init()
}

或者使用已经suggested way


为像我这样的白痴提示:不要尝试覆盖$viewPath属性。

class MyController extends Controller {
    public $viewPath = '@frontend/views/newview'; // Doesn't work
}

这行不通。实际上,需要在基本控制器中设置私有成员$_viewPath!它将在渲染时进行评估(如果参数$view是相对路径)。 $this->viewPath = '...';调用用于设置$_viewPath的setter函数。如果您用$viewPath覆盖了public $viewPath = '...';,将无法再调用magic setter函数,因此$_viewPath将不会更改。