Yii2 params访问公共目录中的本地配置文件

时间:2015-09-21 07:07:32

标签: yii2 yii2-advanced-app

我正在使用Yii2高级模板, 我想访问params.php文件中的main-local.php, 我这样打电话:

主要-local.php:

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

我将此mandrill_api_key存储在params.php

params.php:

<?php
return [
    'adminEmail' => 'admin@example.com',
    'supportEmail' => 'support@example.com',
    'user.passwordResetTokenExpire' => 3600,
     'mandrill_api_key' => 'mykey'
];

我收到了这个错误:

  

注意:尝试在第25行的C:\ xampp \ htdocs \ myproject \ common \ config \ main-local.php中获取非对象的属性

如何获取这些参数?

3 个答案:

答案 0 :(得分:3)

在实例化应用程序之前读取配置文件,如request lifecycle

中所述
  
      
  1. 用户向条目脚本web / index.php。
  2. 发出请求   
  3. 条目脚本加载应用程序配置并创建应用程序实例以处理请求。
  4.   
  5. 应用程序在请求应用程序组件的帮助下解析请求的路由。
  6.   
  7. ...
  8.   

因此\Yii::$app尚不存在因此错误。我建议将你的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();

答案 1 :(得分:2)

params是配置的一部分,你不能在你的配置中调用它。

汉德尔的最佳方式,你可以在课堂上使用它:

MyClass的:

class myClass extends ... {

    public $apikey;

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


}

答案 2 :(得分:2)

你可以做到

$params['mandrill_api_key'] 

你不需要使用

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