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

Muh*_*zad 8 yii2 yii2-advanced-app

我正在使用Yii2高级模板,我想params.phpmain-local.php文件中访问,我这样调用:

主local.php:

'mailer' => [
            'class' => 'myClass',
             'apikey' => \Yii::$app->params['mandrill_api_key'],
             'viewPath' => '@common/mail',            
        ],
Run Code Online (Sandbox Code Playgroud)

我把它存放mandrill_api_key在了params.php

params.php:

<?php
return [
    'adminEmail' => 'admin@example.com',
    'supportEmail' => 'support@example.com',
    'user.passwordResetTokenExpire' => 3600,
     'mandrill_api_key' => 'mykey'
];
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

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

我该怎么做才能访问这些参数?

top*_*her 3

在实例化应用程序之前读取配置文件,如请求生命周期中所述:

  1. 用户向入口脚本web/index.php发出请求。
  2. 入口脚本加载应用程序配置并创建应用程序实例来处理请求。
  3. 应用程序在请求应用程序组件的帮助下解析所请求的路由。
  4. ...

因此\Yii::$app尚不存在,因此出现错误。我建议将 api_key 定义移动到配置中main-local.php,这样就不会混淆它的设置位置:

'mailer' => [
    'class' => 'myClass',
    'apikey' => 'actual api key',
    'viewPath' => '@common/mail',            
],
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 Yii2 的依赖注入容器apikey在应用程序的入口脚本中设置:

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