2

私の Yii アプリには、admin というモジュールが 1 つあるため、モジュール クラスは AdminModule であり、CWebModule クラスを拡張し、AdminModule.php ファイルに配置されます。ドキュメントによると、 CWebModule にはlayout、コントローラー自体にレイアウトが定義されていない場合に備えて、すべてのモジュールコントローラー間で共有されるプロパティがあります。

私のコントローラーにはレイアウトが定義されておらず、AdminModule.php に次のように記述します。

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

ただし、管理モジュールのコントローラーはまだ他のレイアウトを使用しています。コンポーネントディレクトリのController.phpで定義されているものだと思います。何故ですか?特定のモジュールの共有レイアウトをセットアップするにはどうすればよいですか?

4

5 に答える 5

5

解決策は、次のようにコードを少し変更することです。

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

指定されたパスと同様に、レイアウトのパス エイリアス全体を指定する必要はありません。AdminModule.php の init() 関数にこれらの行があり、正常に動作します。

于 2013-08-02T16:34:54.750 に答える
0

次のコードをコントローラーに入れることができます。

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

または、モジュールのブートストラップ クラスに次のコードを配置できます。

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

    Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
}
于 2016-09-25T06:21:45.720 に答える