Quản lý cấu hình (dotenv, settings.php)
Việc quản lý cấu hình một cách linh hoạt, dễ thay đổi là rất quan trọng trong các ứng dụng web. Bài học này hướng dẫn cách sử dụng thư viện vlucas/phpdotenv
để quản lý các biến môi trường trong file .env
, đồng thời tổ chức cấu hình một cách rõ ràng trong file settings.php
.

1 Sử dụng vlucas/phpdotenv
Cài đặt thư viện
composer require vlucas/phpdotenv
Tạo file .env
ở gốc dự án
APP_NAME="Slim Demo"
APP_ENV=development
DB_HOST=localhost
DB_NAME=slim_app
DB_USER=root
DB_PASS=secret
Tải biến môi trường trong index.php
(hoặc bootstrap/app.php
)
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();
Truy cập biến môi trường
$host = $_ENV['DB_HOST'];
Lưu ý: Dùng
$_ENV
hoặcgetenv()
để lấy biến môi trường. Không commit file.env
vào Git — nên có file.env.example
.
2 Tổ chức cấu hình trong settings.php
Tạo file app/settings.php
:
return [
'settings' => [
'displayErrorDetails' => $_ENV['APP_ENV'] !== 'production',
'db' => [
'host' => $_ENV['DB_HOST'],
'dbname' => $_ENV['DB_NAME'],
'user' => $_ENV['DB_USER'],
'pass' => $_ENV['DB_PASS'],
],
],
];
Trong index.php
, nạp cấu hình:
$settings = require __DIR__ . '/../app/settings.php';
$container->set('settings', function () use ($settings) {
return $settings['settings'];
});
Truy cập trong route hoặc service:
$settings = $container->get('settings');
$dbHost = $settings['db']['host'];
Ví dụ cụ thể
Cấu trúc thư mục liên quan:
project/
├── .env
├── app/
│ └── settings.php
├── public/
│ └── index.php
File .env
:
APP_ENV=development
DB_HOST=127.0.0.1
DB_NAME=myapp
DB_USER=root
DB_PASS=123456
File settings.php
:
return [
'settings' => [
'displayErrorDetails' => $_ENV['APP_ENV'] !== 'production',
'db' => [
'host' => $_ENV['DB_HOST'],
'dbname' => $_ENV['DB_NAME'],
'user' => $_ENV['DB_USER'],
'pass' => $_ENV['DB_PASS'],
]
]
];
Truy cập biến cấu hình trong route:
$app->get('/config', function ($request, $response) use ($container) {
$settings = $container->get('settings');
$msg = "DB Host: " . $settings['db']['host'];
$response->getBody()->write($msg);
return $response;
});
Kết luận
Quản lý cấu hình bằng .env
giúp tách biệt dữ liệu nhạy cảm và dễ dàng thay đổi giữa các môi trường (local, staging, production). Việc tổ chức các cài đặt vào settings.php
giúp ứng dụng rõ ràng và dễ mở rộng hơn.
Bài tập thực hành
- Tạo file
.env
với các biến cấu hình liên quan đến cơ sở dữ liệu. - Cài
vlucas/phpdotenv
và load các biến từ.env
trongindex.php
. - Tạo file
settings.php
để gom cấu hình vào một nơi tập trung. - Tạo route
/env-check
để in ra giá trịDB_HOST
từ biến môi trường.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com