2017-03-07 3 views
1

には、「コントローラー」のすべてのコントローラーの前に起動する「メイン」コントローラーがありますか?私は、すべてのユーザーが自分の別のサイトの言語を持つプロジェクトを持っているので、私は最初の設定を確認してから使用して言語を設定したい:今、私は私が持っているすべてのコントローラでこれを行うYii Frameworkのすべてのコントローラーの前にアクション

Yii::$app->language='en-EN'; 

を、私はそれを推測します簡単なオプションにする必要があります。

+0

設定ファイル 'config/main.php'を確認しましたか? –

+0

はい、私は恐れているモデルのいずれにも届きません。私はYii :: $ app-> user-> identity-> user_langを使用しようとしている間に「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されます。 – The50

答えて

2

前に同じ問題があり、別のコンポーネントを追加して解決策を見つけました。

How to load class at every page load in advanced app

部品の一部に設定してクラスを追加し、ブートストラップに追加することにより、起動時にそれをロードします。

config.phpの

$config = [ 
    // .. 
    'components' => [ 
     'InitRoutines' => [ 
      'class' => 'app\commands\InitRoutines', // my custom class 
     ], 
    ], 
]; 

$config['bootstrap'][] = 'InitRoutines'; 

次に、あなたのクラスがinit()メソッド

Componentを拡張するために作るInitRoutines.php

namespace app\commands; 

use Yii; 
use yii\base\Component; 
use app\commands\AppHelper; 
use app\commands\Access; 

class InitRoutines extends Component 
{ 
    // this method runs at start at every page load 
    public function init() 
    { 
     parent::init(); 
     Access::checkForMaintenance(); // my custom method 
     Yii::$app->language = AppHelper::getUserLanguageCode(); // my custom method 
    } 
} 
+0

いいですね!ありがとう。 – The50

1

あなたは、アプリケーションイベントにアタッチすることができますbeforeActionまたはbeforeRequestここにあなたのものをしてください。例:

$config = [ 
    // .. 
    'on beforeRequest' => function($event) { 
     Yii::$app->language='en-EN';   
    } 
]; 
関連する問題