Yii2 params доступ в локальном файле конфигурации в общем каталоге

Я использую Yii2 дополнительно шаблон, Я хочу получить доступ params.php на , Я называл это способами:

главные-местные.на 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'
];

Я получаю эту ошибку:

Примечание: попытка получить свойство не-объекта в C:xampphtdocsmyprojectcommonconfigmain-local - ... PHP на линии 25

что нужно сделать, чтобы получить доступ к этим параметрам?

3 ответов


файлы конфигурации считываются до создания экземпляра приложения, как описано в жизненный цикл запроса:

  1. пользователь делает запрос к скрипту ввода web / index.РНР.
  2. скрипт загружает Настройки Приложения и создает экземпляр приложения для обработки запроса.
  3. приложение разрешает запрошенный маршрут с помощью компонента приложения запроса.
  4. ...

Что такое \Yii::$app еще не существует, следовательно, ошибка. Я бы предложил переместить определение api_key в main-local.php конфигурация такая, что нет путаницы в том, где она устанавливается:

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

кроме того, вы можете использовать контейнер впрыски иждивенчества установить apikey в скрипте ввода вашего приложения:

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

параметры являются частью конфигурации, и вы не можете вызвать это в своей конфигурации .

лучший способ для Генделя это вы можете использовать в своем классе:

myClass:

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