web-dev-qa-db-ja.com

共通ディレクトリのローカル設定ファイル内のYii2パラメータアクセス

Yii2高度なテンプレートを使用していますが、params.phpファイルのmain-local.phpにアクセスしたいので、次のように呼び出しました。

main-local.php:

'mailer' => [
            'class' => 'myClass',
             'apikey' => \Yii::$app->params['mandrill_api_key'],
             'viewPath' => '@common/mail',            
        ],

そして私はこのmandrill_api_keyparams.phpに保存しました

params.php:

<?php
return [
    'adminEmail' => '[email protected]',
    'supportEmail' => '[email protected]',
    'user.passwordResetTokenExpire' => 3600,
     'mandrill_api_key' => 'mykey'
];

このエラーが発生します:

注意:25行目のC:\ xampp\htdocs\myproject\common\config\main-local.phpで非オブジェクトのプロパティを取得しようとしています

これらのパラメータにアクセスするにはどうすればよいですか?

8

request lifecycle で説明されているように、アプリケーションがインスタンス化される前に構成ファイルが読み取られます。

  1. ユーザーがエントリースクリプトweb/index.phpにリクエストを送信します。
  2. エントリスクリプトは、アプリケーション構成をロードし、要求を処理するためのアプリケーションインスタンスを作成します。
  3. アプリケーションは、要求アプリケーションコンポーネントを使用して、要求されたルートを解決します。
  4. .。

そのため、\Yii::$appはまだ存在しないため、エラーが発生します。 api_key定義をmain-local.php構成に移動して、設定場所が混乱しないようにすることをお勧めします。

'mailer' => [
    'class' => 'myClass',
    'apikey' => 'actual api key',
    'viewPath' => '@common/mail',            
],

または、Yii2の 依存性注入コンテナ を使用して、アプリケーションのエントリスクリプトにapikeyを設定することもできます。

...
$app = new yii\web\Application($config);
\Yii::$container->set('\fully\qualified\myClass', [
    'apikey' => \Yii::$app->params['mandrill_api_key'],
]);
$app->run();
3
topher

あなたはただすることができます

$params['mandrill_api_key'] 

使用する必要はありません

\Yii::$app->params['mandrill_api_key']
2
huss

Paramsはconfigの一部であり、configでこれを呼び出すことはできません。

これを処理するための最良の方法は、クラスでこれを使用できます。

私のクラス:

class myClass extends ... {

    public $apikey;

    public function __construct(){
        $this->apikey =  \Yii::$app->params['mandrill_api_key'];
    }


}
2
Amir Mohsen