Сбой приложения Laravel при использовании вспомогательной функции config - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь загрузить различное промежуточное программное обеспечение для разных сред. Что-то вроде:

Включить глобальное промежуточное ПО только для одной среды в Laravel 5

Я пытался получить доступ к параметрам конфигурации, используя вспомогательную функцию config. Код в App/Http/Kernel.php

public function __construct(Application $app, Router $router)
{
    parent::__construct($app, $router);

    $env = 'devel' ;
    $env = config('app.env');

    if ( $env == 'devel' ) {
        $this->prependMiddleware('\App\Http\Middleware\GlobalConfigDevel');
    }        
}

но выдает следующее исключение:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class config does not exist' 

Если я прокомментирую строку:

//$env=config('app.env');

Работает без проблем, загружая промежуточное ПО GlobalConfigDevel. Фактически, при использовании следующего маршрута в routes/wep.php (который использует вспомогательную функцию config), он показывает параметр среды !!

Route::get('/', function () {
    return dd(config('app.env'));
});

Есть ли причина не использовать вспомогательные функции внутри конструктора ??

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

$env = env('APP_ENV', 'devel');

1 Ответ

0 голосов
/ 11 мая 2018

Это потому, что служба config еще не инициализирована, поэтому вы не можете получить к ней доступ в конструкторе ядра HTTP.

Вы можете выполнить \App\Http\Middleware\GlobalConfigDevel для каждого запроса и выполнить тест внутри него,что-то вроде

// First lines of \App\Http\Middleware\GlobalConfigDevel@handle
if ( config('app.env') !== 'devel' ) {
    return next($request);
}

// Handle your stuff here otherwise...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...