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 ответов
файлы конфигурации считываются до создания экземпляра приложения, как описано в жизненный цикл запроса:
- пользователь делает запрос к скрипту ввода web / index.РНР.
- скрипт загружает Настройки Приложения и создает экземпляр приложения для обработки запроса.
- приложение разрешает запрошенный маршрут с помощью компонента приложения запроса.
- ...
Что такое \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']