Yii2 参数在公共目录中的本地配置文件中访问

Yii2 params access within local config file in common directory

我正在使用 Yii2 高级模板, 我想访问 main-local.php 文件中的 params.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'
];

我收到这个错误:

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

我应该如何访问这些参数?

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

中所述
  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 尚不存在,因此出现错误。我建议将您的 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();

参数是配置的一部分,您不能在配置中调用它。

你可以在你的 class 中使用它,这是 handel 的最佳方式:

我的班级:

class myClass extends ... {

    public $apikey;

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


}

你可以做到

$params['mandrill_api_key'] 

你不需要使用

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