今、私はYii2ベースのプロジェクト用にテーマ作成を実装しようとしています。Yii2はDBに格納された情報からパスエイリアスを作成します
- ユーザーは、バックエンドでの設定 ページのリストからアプリケーションのテーマを選択します:。私は今のものを参照してくださいどのように
- yii2-settingsを使用すると、すべての 構成データがDBに保存されます(かなり簡単です)。
- アプリケーション内 bootstrap.php私は@themeという新しいエイリアスを作成しています。基本的に は、アプリケーションテーマベースのパス(検索では パス、資産マネージャ、e.t.cで使用されます)につながなければなりません。
'view' => [ 'theme' => [ 'basePath' => '@theme', 'baseUrl' => '@theme', 'pathMap' => [ '@app/views' => '@theme', '@app/widgets' => '@theme/widgets', '@app/modules' => '@theme/modules', ], ], ],
私が持っている問題は、P.3である:
は公式 ドキュメントによると、それは私が私のビューコンポーネントの構成方法です。私は、設定を読みになってみましょうyii2-settingsドキュメントによると:bootstrap.phpのが呼び出されたときにyii2-設定コンポーネントの初期化されていませんでしたので、
$theme = Yii::$app->settings->get('name', 'general');
Yii::setAlias('@theme', realpath(dirname(__FILE__)."/../../themes/$theme"));
しかし、明らかに、それは私のために働いていません。後で私のベースコントローラのinit()メソッドで初期化してから、別のエイリアスを手作業で調整しようとしていましたが、やや汚れているように感じます。また、@themeエイリアスも使用されていますコントローラのinitメソッドを呼び出す前に、Yii2がパブリッシュを開始するアセットファイルに格納されます。
誰も、できるだけコードを「ハッキングする」方法を考えている人はいますか?私は設定をいくつかのファイルに移動してから、アプリケーションの初期化の前に手動で読み込むことができますが、それでもやりたいことではありません。 dbコンポーネントがロードされた後、ビューコンポーネントの構成の前にエイリアスを設定するために、システムコンポーネントをオーバーライドする方法がありますか?または、Yiiはこのコンポーネントを別の順序でロードしますか?とにかく。どんな助けもありがとう!
http://stackoverflow.com/questions/32689230/yii2-params-access-local-config-common-common-directory –