2013-08-02 38 views
2

在我的Yii應用程序中我有一個名爲admin的模塊,所以模塊類是AdminModule,它擴展了CWebModule類並位於AdminModule.php文件中。根據文檔,CWebModule具有layout屬性,該屬性在所有模塊控制器之間共享,以防控制器本身沒有定義任何佈局。如何爲Yii模塊中的所有控制器設置佈局?

我的控制器沒有任何佈局定義和AdminModule.php我把這個:

$this->layout='webroot.themes.bootstrap.views.layouts.column2'; 
$this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts'); 

然而,我在管理模塊控制器仍然使用一些其他的佈局,我認爲這是在定義的組件目錄中的Controller.php。這是爲什麼?如何爲特定模塊設置共享佈局?

回答

0

該解決方案在您的模塊中設置beforeControllerAction的佈局。它應該工作。 我已經回答了類似的問題,請參考一下吧 Yii module layout

+0

感謝您的答覆。看到我的答案 - 它在init()中是可行的,我剛剛完成了錯誤的代碼。除此之外,我認爲把這些東西放到'beforeControllerAction()'中是不符合語義的。我不確定,但是我會使用這個函數來指定在控制器被觸發之前必須執行的**動作**,而不是進行一些配置更改。 – petiar

+0

因爲我經歷了一些票據,有些人詢問有關設置佈局在初始化時無法使用。如果它與你一起工作,它會很好,因爲它解決了你的問題。 –

1

嘗試設置佈局路徑如下圖所示

$this->layout="webroot/themes/bootstrap/views/layouts/column2"; 
5

的解決方案是稍微改變我的代碼,像這樣:

$this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts'); 
$this->layout = 'column2'; 

與指定的路徑一樣,我不需要爲佈局指定整個路徑別名。我有這些行在我的AdminModule.php的init()函數,它工作正常。

0

如果您同時使用模塊和主題(如引導程序),這意味着Yii首先會在主題文件夾中查找視圖文件(包括佈局文件,特殊視圖文件),在CController中有一個名爲resolveViewFile的重要函數,您可以在此添加調試點以瞭解其工作原理,下面是我的解決方案:

1.我有一個名爲「admin」的模塊。

2.在AdminModule的初始化函數中添加:

$this->layout = 'column2';

3.刪除模塊的所有視圖文件,主題文件夾

0

你可以把下面的代碼在你的控制器。

public function init() 
{ 
    Yii::$app->setLayoutPath($this->module->getBasePath().'/views/layout'); 
} 

,或者你可以把下面的代碼在你的模塊引導類

public function init() 
{ 
    parent::init(); 

    Yii::$app->setLayoutPath($this->getBasePath().'/views/layout'); 
} 
相關問題