Yii2:为特定控制器设置布局

Yii2: Setting layout for a specific controller

我想更改控制器内所有视图的布局。所以我想这样设置:

class SiteController extends Controller {

public function __construct(){
   $this->layout = 'admin';
}
.....

但我收到以下错误:

Call to a member function getUniqueId() on null

我使用了 init() 并按预期工作。我将代码更改为:

class SiteController extends Controller {

    public function init() {
        $this->layout = 'admin';
    }
....

您的站点控制器扩展到父控制器。所以你可以在父控制器中创建构造函数,但不能在站点控制器中创建....

尝试使用

public function init(){

}

在站点控制器中

yii2 默认使用主布局作为项目及其控制器的布局,但是如果你想为控制器使用另一个布局或更改布局名称并将该布局用于控制器必须定义布局属性 在您的控制器 class 中,并将您的布局名称作为该 属性.

的字符串值

这会将控制器的布局更改为具有您选择的名称的所需布局。

这是您案例中的代码:

class SiteController extends Controller 
{
   public $layout = '[Your Layout Name]';

   .
   .
   .
}

P.S:构造函数是在您创建 class 实例时运行的方法,在这种情况下使用它是不合逻辑的。