Tập 2: Cấu hình trong Laravel (Laravel Configuration)
Bài đăng này đã không được cập nhật trong 2 năm
Chào mừng các bạn đã quay trở lại, trong tập này 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, 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
'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àmenv('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ử tôi 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'] = '123456';
echo $f;
});
Như bạn thấy, tôi đã set một giá trị cho $_POST['password']
và ở dưới tôi đã 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ếnAPP_KEY
vàDB_PASSWORD
ở_ENV
và_SERVER
.
II. Truy cập giá trị cấu hình (Accessing Configuration Values)
Bạn 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']);
Để mình giải thích thêm về đoạn app.timezone
, đây 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
Mình sẽ dừng lại phần này ở đây, ta có thể tìm hiểu sâu hơn khi tới tập "Cache Laravel".
IV. Chế độ bảo trì (Maintenance mode)
Đôi khi hệ thống 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, 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
Cảm ơn các bạn đã quan tâm theo dõi. Cùng đồng hành với mình qua những tập tiếp theo tại series "Hành trình chinh phục Laravel Framework" nhé! Chúc may mắn và hẹn gặp lại.
Mình đang xây dựng blog riêng là lechihuy.dev , mong các bạn ghé sang ủng hộ, mình cảm ơn rất nhiều ạ
All rights reserved