Vì trên production quy trình deploy chạy php artisan config:cache.
- Lệnh này serialize toàn bộ file trong
config/thànhbootstrap/cache/config.php, và từ đó Laravel không nạp file.envnữa. - Mọi lời gọi
env()nằm ngoài thư mụcconfig/sẽ trả vềnull.
php
// SAI — trong controller / service / model
$key = env('SEPAY_API_KEY'); // null sau khi config:cache
// ĐÚNG — env() chỉ dùng trong config/, code đọc qua config()
// config/services.php
return ['sepay' => ['key' => env('SEPAY_API_KEY')]];
// bất kỳ đâu khác
$key = config('services.sepay.key');Quy tắc: env() chỉ xuất hiện trong config/*.php. Phần còn lại của ứng dụng dùng config().
Hệ quả vận hành cần biết:
- Đổi biến trong .env mà không chạy lại config:cache thì giá trị cũ vẫn còn. Deploy phải theo thứ tự: cập nhật .env → config:cache → queue:restart.
- Muốn quay lại đọc .env thì config:clear.
- Cùng họ còn có route:cache (không dùng được với closure route — phải chuyển sang controller) và view:cache, event:cache.
- Ở local không nên bật config cache, vì mọi thay đổi .env sẽ không có hiệu lực và dễ mất thời gian tìm nhầm chỗ.