Junior: питання на співбесіді з теми «Конфігурація»
Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.
2 питання
Файл .env лежить у корені проєкту й зберігає налаштування, специфічні для середовища, та секрети: доступи до БД, API-ключі, APP_KEY, режим APP_ENV. Ідея в тому, що той самий код працює в різних середовищах (локально, staging, продакшен) лише завдяки різним .env.
APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=mysql
DB_PASSWORD=secret
STRIPE_KEY=sk_test_...
Ключові правила:
.envне комітиться в git (він у.gitignore) - кожен розробник і сервер має власний. Натомість комітять.env.exampleяк шаблон без секретів.- Значення зчитуються хелпером
env('KEY', 'default'), але викликатиenv()слід лише у файлахconfig/. - У застосунку звертайтесь через
config('services.stripe.key'), а неenv(...)напряму: післяphp artisan config:cache(оптимізація на проді) викликиenv()поза конфігом повертаютьnull.
Навіщо: секрети не потрапляють у код/репозиторій, а конфігурацію легко змінювати під середовище без редагування коду.
Створити файл у config/, що повертає масив, і читати значення через config() з «крапковою» нотацією.
// config/billing.php
return [
'currency' => env('BILLING_CURRENCY', 'UAH'),
'trial_days' => (int) env('BILLING_TRIAL_DAYS', 14),
'gateways' => ['liqpay', 'stripe'],
];
$currency = config('billing.currency');
$days = config('billing.trial_days', 14); // значення за замовчуванням
$days = Config::integer('billing.trial_days'); // типізоване читання
Правила:
env()- лише у файлахconfig/. Післяphp artisan config:cacheфайл.envбільше не читається, іenv()у коді повернеnull;- секрети (ключі API, паролі) - у
.env, у файлі конфігурації лише посилання на змінну; - нову змінну додають і в
.env.example, щоб колеги й CI знали про неї.
Типізовані методи Config::string(), integer(), boolean(), array() кидають виняток, якщо значення не того типу. Помилка конфігурації видно одразу, а не в дивній поведінці далі.
Конфігурацію сторонніх пакетів публікують командою php artisan config:publish чи vendor:publish.