我正在尝试在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',
但它也不起作用。
我该怎么办?
答案 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
将不会更改。