2015-09-21 11 views
7

私はYii2高度なテンプレートを使用しています、私はmain-local.phpファイルにparams.phpにアクセスしたい 、 私はこの方法を呼ば:共通ディレクトリ内のローカル設定ファイル内のYii2のparamsアクセス

メインlocal.phpファイル:

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

と私はparams.php

でこの mandrill_api_keyを格納している

params.php:私はこのエラーを取得してい

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

Notice: Trying to get property of non-object in C:\xampp\htdocs\myproject\common\config\main-local.php on line 25

私は、これらのパラメータにアクセスするにはどうすればよいですか? request lifecycleで説明したように、アプリケーションがインスタンス化される前

+0

\を追加してみましたか? \ Yii :: $ app-> params ['mandrill_api_key'] – Criesto

+0

はい、私はこれを試しましたが、動作しません。アプリケーションのブートストラップ時に何かを定義する必要があるかもしれません。 –

答えて

3

設定ファイルが読み取られる。このような\Yii::$appとして

  1. A user makes a request to the entry script web/index.php.
  2. The entry script loads the application configuration and creates an application instance to handle the request.
  3. The application resolves the requested route with the help of the request application component.
  4. ...

まだしたがってエラー存在しません。

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

また、あなたのアプリケーションのエントリスクリプトでapikeyを設定するYii2のdependancy injection containerを使用することができます:

私はそれが設定されている場所の上に混乱がないよう main-local.php設定にごAPI_KEY定義を移動することをお勧め
... 
$app = new yii\web\Application($config); 
\Yii::$container->set('\fully\qualified\myClass', [ 
    'apikey' => \Yii::$app->params['mandrill_api_key'], 
]); 
$app->run(); 
+0

私はお試しいただきありがとうございますが、私の問題は、私はデータベースからこのAPIキーを取得し、設定で設定する必要があります。 –

+0

@hussは、ローカル設定ファイルで$ paramsを直接使うことができると指摘しています – nevermind

2

paramsはconfigの一部であり、あなたの設定でこれを呼び出すことはできません。

これは、あなたのクラスでこれを使用することができヘンデルのための最善の方法:

MYCLASS:

class myClass extends ... { 

    public $apikey; 

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


} 
2

あなたはただ行うことができますあなたが使用する必要がいけない

$params['mandrill_api_key'] 

\Yii::$app->params['mandrill_api_key'] 
+0

これは受け入れられる回答でなければなりません。 Yii2 configは、メイン設定スクリプトの起動時にparamsファイルをロードします。 $ params = require(__ DIR__。 '/params.php'); ファイルのどの部分にも$ params配列を使用できます –

関連する問題