Quản lý cấu hình (dotenv, settings.php)

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 6 tháng 6, 2025

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ặc getenv() để 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

  1. Tạo file .env với các biến cấu hình liên quan đến cơ sở dữ liệu.
  2. Cài vlucas/phpdotenv và load các biến từ .env trong index.php.
  3. Tạo file settings.php để gom cấu hình vào một nơi tập trung.
  4. Tạo route /env-check để in ra giá trị DB_HOST từ biến môi trường.
Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ