Вопрос проверяет понимание работы с конфигурацией, env-переменными и правильного места их использования в Laravel.
Да, в сервис-провайдере можно передавать значения из env в создаваемые сервисы, но напрямую вызывать env() там не рекомендуется. Правильный подход — сначала описать значения в конфигурационных файлах, а затем получать их через config(). Это связано с кешированием конфигов в Laravel. Такой подход делает приложение стабильнее и предсказуемее.
Laravel позволяет использовать переменные окружения, но делает это через конфигурацию, а не напрямую в бизнес-коде.
Определение: env-переменные — это значения из окружения (
.env), которые используются для настройки приложения и загружаются на этапе конфигурации.
Перед началом важно помнить: env() предназначен только для конфигов, а не для runtime-кода.
// config/services.php
return [
'payment' => [
'api_key' => env('PAYMENT_API_KEY'),
],
];
config() в сервис-провайдереpublic function register(): void
{
$this->app->singleton(\App\Services\PaymentClient::class, function () {
return new \App\Services\PaymentClient(
config('services.payment.api_key')
);
});
}
env() напрямуюПри php artisan config:cache прямые вызовы env() перестают работать корректно
Конфигурация должна быть централизованной
Код становится проще тестировать
Работа с внешними API (ключи, токены)
Настройка таймаутов, URL, режимов работы
Разные окружения (local / staging / production)
В сервис-провайдерах можно и нужно прокидывать значения из окружения, но делать это следует через конфигурацию, используя config(), а не прямой вызов env().