Cấu hình trong Laravel (Laravel Configuration)

Welcome các bạn đã quay trở lại thế giới Laravel. Trong bài học tiếp theo này chúng mình sẽ nói về cấu hình trong Laravel và hướng dẫn các bạn cách để thao tác với nó. Nào move move , bắt đầu thôi!

I. Cấu hình môi trường (Environment configuration)

Các thao tác về cấu hình môi trường ta thường xoay quay ở file .env và các file ở thư mục config.

1. Lấy cấu hình môi trường (Retrieving environment configuration)

Để lấy các thiết lập từ file .env chúng ta sử dụng hàm env().

Ví dụ: Lấy cấu hình của APP_DEBUG trong .env để setup cho config/app.php

Truy cập config/app.php thêm vào dòng sau

'debug' => env('APP_DEBUG', false)

Trong hàm env():

  • Tham số đầu tiên chính là tên của cấu hình môi trường.
  • Tham số thứ hai chính là giá trị mặc định (default value), hàm env() sẽ trả về giá trị này nếu không tồn tại cấu hình môi trường ở tham số đầu tiên. Trong trường hợp này, nếu file .env không có APP_DEBUG thì hàm env('APP_DEBUG', false) sẽ trả về (bool) false.

2. Xác định môi trường hiện tại (Determining current environment)

Chúng ta sẽ sử dụng phương thức environment từ App facade:

$currentEnv = App::environment() // (string)

Phương thức trên có thể nhận một tham số là (string) hoặc (array) cho phép chúng ta kiểm tra môi trường hiện tại:

if (App::environment('local')) { 
   // This is local environment
}

if (App::environment(['local', 'production']) {
   // This is local enviroment or product environment
}

3. Ẩn biến môi trường từ trang debug (Hiding environment variables form debug page)

Giả sử chúng ta mắc phải một lỗi nào đó khi request, trong request đó có một trường password quan trọng. Đây là đoạn code để test ở file routes/web.php:

Route::get('/', function () {
    $_POST['password'] = '123abc';
    echo $f;
});

Như bạn thấy, chúng  ta đã set một giá trị cho $_POST['password'] và ở dưới chúng mình đã code lệnh echo một biến chưa được xác định (underfined variable).

Bây giờ tôi nạp server và chạy thử trên trình duyệt, một debug page hiện ra, báo lỗi về đoạn code trên. Các bạn roll chuột xuống phía dưới ở cột bên phải, bạn sẽ thấy ngay ở Post Data, trường password của chúng ta đã bị lộ.

Thông thường thì password khi code sẽ được mã hóa nhưng đây cũng là một vấn đề đáng quan ngại, vậy có cách nào để khắc phục không? Laravel cung cấp cho chúng ta config debug_blacklist giúp giải quyết vấn đề này.

Tại file config/app.php, hãy thêm đoạn code này và quay lại trang debug:

'debug_blacklist' => [
    '_ENV' => [
        'APP_KEY',
        'DB_PASSWORD',
    ],


    '_SERVER' => [
        'APP_KEY',
        'DB_PASSWORD',
    ],


    '_POST' => [
        'password',
    ],
]

Khi quay lại trang debug chúng ta thấy password đã được mã hóa.

Lưu ý: Một vài biến có sẵn có cả trong biến môi trường và biến máy chủ/request, chính vì thế khi muốn blacklist biến nào thì phải thêm ở cả _ENV và _SERVER. Chẳng hạn ở đoạn code trên, tôi đã blacklist hai biến APP_KEY và DB_PASSWORD ở _ENV và _SERVER.

II. Truy cập giá trị cấu hình (Accessing Configuration Values)

Chúng ta có thể truy cập dễ dàng các giá trị của cấu hình thông qua hàm config().

Ví dụ: Lấy giá trị của cấu hình timezone.

$value = config('app.timezone');

Ngoài chức năng trên, hàm config() này có thể thay đổi giá trị của cấu hình mà không cần phải thao tác trên file .env hay bất kỳ file nào ở thư mục config:

config(['app.timezone' => 'Asia/Ho_Chi_Minh']);

Trong đó:

app.timezone chính là tham số trỏ đến cấu hình timezone ở file config/app.php

Từ đó ta có thể rút ra được, để thao tác với bất kì cấu hình nào đã được khai báo, ta sẽ trỏ nó theo cú pháp name_file_config.name_config.

Lưu ý: Bạn có thể tự tạo cho mình một file config, hoặc tự định nghĩa một config vào những file có sẵn, kể cả .env miễn bạn code theo đúng quy cách có sẵn.

III. Cache cấu hình (Configuration Caching)

Laravel cung cấp một chức năng có thể cache những cấu hình đã thiết lập, tại commander bạn gõ lệnh

php artisan config:cache

Khi thực thi lệnh này, dù bạn có thay đổi gì ở file .env hay các file config thì các giá trị cấu hình vẫn giữ nguyên. Chức năng này dùng khi bạn chuẩn bị deloy dự án của mình.

Nếu bạn muốn thay đổi, có thể dùng lệnh bên dưới để xóa cache:

php artisan cache:clear

IV. Chế độ bảo trì (Maintenance mode)

Dĩ nhiên đôi khi hệ thống của bạn cũng cần được bảo trì, để làm điều này chỉ cần chạy lệnh:

php artisan down

Khi chạy lại hệ thống, cúng ta sẽ trả về một trang lỗi với mã 503.

Bạn có thể cung cấp một thông báo đến hệ thống kèm theo thời gian quay trở lại với lệnh sau:

php artisan down --message="Maintenancing..." --retry=3600

Tham số retry sẽ tính theo đơn vị giây.

Trong khi bảo trì bạn có thể cho phép một số địa chỉ IP cụ thể để có thể truy cập vào hệ thống.

php artisan down --allow=127.0.0.1 --allow=192.168.0.0/1

Khi quá trình bảo trì đã hoàn tất, bạn có thể khởi động lại với lệnh:

php artisan up

Lời kết: 

Vậy là chúng ta đã biết cách cấu hình Laravel cơ bản rồi đấy các bạn ạ. Nếu có gì khó hiểu hãy comment bên dưới nhé!

Bình luận