2015-09-21 77 views
7

我使用Yii2先進的模板, 我想訪問params.phpmain-local.php文件, 我稱這種方式:Yii2 PARAMS內本地配置文件訪問的公共目錄

主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' 
]; 

我得到這個錯誤:

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

我應該怎麼做才能訪問這些參數?

  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. ...

這樣\Yii::$app尚不存在因此錯誤:

+0

您是否嘗試添加\,所以如此mething like:\ Yii :: $ app-> params ['mandrill_api_key'] – Criesto

+0

是的,我已經嘗試過,但沒有工作,可能是我需要定義應用程序引導時的東西。 –

回答

3

在配置文件的應用程序之前被讀取爲在request lifecycle說明的實例化。我建議你API_KEY定義移動到main-local.php配置,使得不存在混淆它被設置在:

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

或者,你可以使用Yii2的dependancy injection container設置apikey在應用程序的入口腳本:

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

謝謝我會嘗試,但我的問題是,我必須從數據庫中獲取此API密鑰並在config中設置。 –

+0

as @huss指出你可以直接在本地配置文件中使用$ params – nevermind

2

參數是配置的一部分,你不能在你的配置中調用它。

爲亨德爾這個你可以在課堂上使用最好的方法:

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在啓動main-config腳本時加載params文件 $ params = require(__ DIR__。'/params.php'); 所以你可以在文件的任何部分使用$ params數組 –