Laravel: Cấu hình

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Giới thiệu

Tất cả các tệp cấu hình cho framework Laravel được lưu trữ trong thư mục config. Mỗi tùy chọn đều được lập thành tài liệu, vì vậy hãy thoải mái xem qua các tệp và làm quen với các tùy chọn có sẵn cho bạn.

Các tệp cấu hình này cho phép bạn định cấu hình những thứ như thông tin kết nối cơ sở dữ liệu, thông tin máy chủ thư của bạn, cũng như các giá trị cấu hình cốt lõi khác như múi giờ ứng dụng và khóa mã hóa.

Cấu hình môi trường

Thường sẽ hữu ích nếu có các giá trị cấu hình khác nhau dựa trên môi trường nơi ứng dụng đang chạy. Ví dụ: bạn có thể muốn sử dụng cục bộ trình điều khiển bộ nhớ cache khác với trình điều khiển bộ nhớ cache trên máy chủ ứng dụng của mình.

Để làm cho điều này trở nên dễ dàng, Laravel sử dụng thư viện PHP của DotEnv. Trong cài đặt Laravel mới, thư mục gốc của ứng dụng của bạn sẽ chứa một file .env.example xác định nhiều biến môi trường phổ biến. Trong quá trình cài đặt Laravel, file này sẽ tự động được sao chép sang file .env.

File mặc định .env của Laravel chứa một số giá trị cấu hình chung có thể khác nhau dựa trên việc ứng dụng của bạn đang chạy cục bộ hay trên máy chủ web ứng dụng. Các giá trị này sau đó được truy xuất từ ​​các tệp cấu hình Laravel khác nhau trong thư mục config bằng cách sử dụng hàm env của Laravel.

Nếu bạn đang phát triển ứng dụng với một nhóm, bạn có thể muốn tiếp tục tích hợp một file .env.example với ứng dụng của mình. Bằng cách đặt các giá trị trình giữ chỗ trong tệp cấu hình ví dụ, các nhà phát triển khác trong nhóm của bạn có thể thấy rõ những biến môi trường nào cần thiết để chạy ứng dụng của bạn.

Bất kỳ biến nào trong file .env của bạn đều có thể bị ghi đè bởi các biến môi trường bên ngoài như biến môi trường cấp máy chủ hoặc cấp hệ thống.

Bảo mật file môi trường

File .env của bạn không được commit với quyền kiểm soát nguồn của ứng dụng, vì mỗi nhà phát triển/máy chủ sử dụng ứng dụng của bạn có thể yêu cầu cấu hình môi trường khác nhau. Hơn nữa, đây sẽ là một rủi ro bảo mật trong trường hợp kẻ xâm nhập giành được quyền truy cập vào kho lưu trữ kiểm soát nguồn của bạn, vì bất kỳ thông tin xác thực nhạy cảm nào cũng sẽ bị lộ.

Các loại biến môi trường

Tất cả các biến trong file .env của bạn thường được phân tích cú pháp dưới dạng chuỗi, vì vậy một số giá trị dành riêng đã được tạo để cho phép bạn trả về nhiều loại hơn từ hàm env():

Giá trị .env Giá trị env()
true (bool) true
(true) (bool) true
false (bool) false
(false) (bool) false
empty (string) ''
(empty) (string) ''
null (null) null
(null) (null) null

Nếu bạn cần xác định một biến môi trường có giá trị chứa khoảng trắng, bạn có thể làm như vậy bằng cách đặt giá trị trong dấu nháy kép:

APP_NAME="My Application"

Truy xuất cấu hình môi trường

Tất cả các biến được liệt kê trong tệp này sẽ được tải vào super-global PHP $_ENV khi ứng dụng của bạn nhận được yêu cầu. Tuy nhiên, bạn có thể sử dụng trình trình trợ giúp env để truy xuất giá trị từ các biến này trong tệp cấu hình của mình. Trên thực tế, nếu bạn xem lại các tệp cấu hình Laravel, bạn sẽ nhận thấy nhiều tùy chọn đã được sử dụng trình trợ giúp này:

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

Giá trị thứ hai được truyền cho hàm env là "giá trị mặc định". Giá trị này sẽ được trả về nếu không có biến môi trường nào tồn tại cho khóa đã cho.

Xác định môi trường hiện tại

Môi trường ứng dụng hiện tại được xác định thông qua biến APP_ENV từ file .env. Bạn có thể truy cập giá trị này thông qua phương thức environment trên facade App:

use Illuminate\Support\Facades\App;

$environment = App::environment();

Bạn cũng có thể truyền các đối số cho phương thức environment để xác định xem môi trường có khớp với một giá trị nhất định hay không. Phương thức sẽ trả về true nếu môi trường khớp với bất kỳ giá trị nào trong số các giá trị đã cho:

if (App::environment('local')) {
    // Môi trường là local
}

if (App::environment(['local', 'staging'])) {
    // Môi trường là local hoặc staging
}
Phát hiện môi trường ứng dụng hiện tại có thể được ghi đè bằng cách xác định một biến môi trường APP_ENV cấp máy chủ .

Truy cập giá trị cấu hình

Bạn có thể dễ dàng truy cập các giá trị cấu hình của mình bằng cách sử dụng chức năng trợ giúp config chung từ bất kỳ đâu trong ứng dụng của bạn. Các giá trị cấu hình có thể được truy cập bằng cú pháp "dấu chấm", bao gồm tên của tệp và tùy chọn bạn muốn truy cập. Giá trị mặc định cũng có thể được chỉ định và sẽ được trả về nếu tùy chọn cấu hình không tồn tại:

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

// Truy xuất một giá trị mặc định nếu giá trị cấu hình không có sẵn
$value = config('app.timezone', 'Asia/Seoul');

Để đặt các giá trị cấu hình trong thời gian chạy (runtime), hãy chuyển một mảng cho trình trợ giúp config:

config(['app.timezone' => 'America/Chicago']);

Cấu hình Cache

Để tăng tốc độ cho ứng dụng, bạn nên lưu tất cả các tệp cấu hình của mình vào một tệp duy nhất bằng lệnh Artisaan config:cache. Điều này sẽ kết hợp tất cả các tùy chọn cấu hình cho ứng dụng của bạn thành một tệp duy nhất có thể được tải nhanh bởi framework.

Bạn thường nên chạy lệnh php artisan config:cache như một phần của quá trình triển khai ứng dụng. Không nên chạy lệnh trong quá trình phát triển cục bộ vì các tùy chọn cấu hình sẽ thường xuyên cần được thay đổi trong quá trình phát triển ứng dụng của bạn.

Nếu bạn thực hiện lệnh config:cache trong quá trình triển khai ứng dụng, bạn nên chắc chắn rằng bạn chỉ đang gọi hàm env từ bên trong các tệp cấu hình của mình. Khi cấu hình đã được lưu vào bộ nhớ đệm, file .env sẽ không được tải; do đó, hàm env sẽ chỉ trả về các biến môi trường bên ngoài, cấp hệ thống.

Chế độ kiểm tra sửa lỗi

Tùy chọn debug trong file cấu hình config/app.php của bạn xác định có bao nhiêu thông tin về một lỗi thực sự hiển thị cho người dùng. Theo mặc định, tùy chọn này được đặt để tôn trọng giá trị của biến môi trường APP_DEBUG, được lưu trữ trong file .env.

Để phát triển cục bộ, bạn nên đặt biến môi trường APP_DEBUG thành true. Nhưng trong môi trường ứng dụng thì giá trị này luôn phải là false. Nếu biến được đặt thành true trong ứng dụng thì bạn có nguy cơ để lộ các giá trị cấu hình nhạy cảm cho người dùng cuối ứng dụng của mình.

Chế độ bảo trì

Khi ứng dụng của bạn ở chế độ bảo trì, một chế độ xem tùy chỉnh sẽ được hiển thị cho tất cả các yêu cầu vào ứng dụng của bạn. Điều này giúp bạn dễ dàng "vô hiệu hóa" ứng dụng của mình trong khi nó đang cập nhật hoặc khi bạn đang thực hiện bảo trì. Kiểm tra chế độ bảo trì được tich hợp trong ngăn xếp phần mềm trung gian mặc định cho ứng dụng của bạn. Nếu ứng dụng đang ở chế độ bảo trì, một phiên bản Symfony\Component\HttpKernel\Exception\HttpException sẽ được đưa ra với mã trạng thái là 503.

Để bật chế độ bảo trì, hãy thực hiện lệnh Artisan down như sau:

php artisan down

Nếu bạn muốn header HTTP Refresh được gửi cùng với tất cả các phản hồi của chế độ bảo trì, bạn có thể cung cấp tùy chọn refresh khi gọi lệnh down. Header Refresh sẽ hướng dẫn trình duyệt tự động làm mới trang sau một số lượng giây (second) nhất định:

php artisan down --refresh=15

Bạn cũng có thể cung cấp một tùy chọn retry cho lệnh down, lệnh này sẽ được đặt làm giá trị của header HTTP Retry-After, mặc dù các trình duyệt thường bỏ qua header này:

php artisan down --retry=60

Bỏ qua chế độ bảo trì

Ngay cả khi ở chế độ bảo trì, bạn có thể sử dụng tùy chọn secret để chỉ định mã thông báo bỏ qua chế độ bảo trì:

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

Sau khi đặt ứng dụng ở chế độ bảo trì, bạn có thể điều hướng đến URL ứng dụng khớp với mã thông báo này và Laravel sẽ đưa ra cookie bỏ qua chế độ bảo trì cho trình duyệt của bạn:

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

Khi truy cập vào route ẩn này thì bạn sẽ được chuyển hướng đến route / của ứng dụng. Khi cookie đã được cấp cho trình duyệt của bạn, bạn sẽ có thể duyệt ứng dụng bình thường như thể nó không ở chế độ bảo trì.

Kết xuất trước View chế độ bảo trì

Nếu bạn sử dụng lệnh php artisan down trong quá trình triển khai, người dùng của bạn đôi khi vẫn có thể gặp phải lỗi nếu họ truy cập vào ứng dụng trong khi các dependency Composer của bạn hoặc các thành phần cơ sở hạ tầng khác đang cập nhật. Điều này xảy ra do một phần quan trọng của framework Laravel phải khởi động để xác định ứng dụng của bạn đang ở chế độ bảo trì và hiển thị chế độ bảo trì bằng cách sử dụng công cụ tạo khuôn mẫu.

Vì lý do này, Laravel cho phép bạn kết xuất trước một View chế độ bảo trì sẽ được trả về vào đầu chu kỳ yêu cầu. View này được hiển thị trước khi bất kỳ dependency nào của ứng dụng của bạn được tải. Bạn có thể kết xuất trước một mẫu bạn chọn bằng cách sử dụng tùy chọn render của lệnh down:

php artisan down --render="errors::503"

Chuyển hướng yêu cầu chế độ bảo trì

Trong khi ở chế độ bảo trì, Laravel sẽ hiển thị View chế độ bảo trì cho tất cả các URL ứng dụng mà người dùng cố gắng truy cập. Nếu muốn, bạn có thể hướng dẫn Laravel chuyển hướng tất cả các yêu cầu đến một URL cụ thể. Điều này có thể được thực hiện bằng cách sử dụng tùy chọn redirect. Ví dụ: bạn có thể muốn chuyển hướng tất cả các yêu cầu đến URI /:

php artisan down --redirect=/

Tắt chế độ bảo trì

Để tắt chế độ bảo trì, hãy sử dụng lệnh up:

php artisan up
Bạn có thể tùy chỉnh mẫu chế độ bảo trì mặc định bằng cách xác định mẫu của riêng bạn tại resources/views/errors/503.blade.php.

Chế độ bảo trì & hàng đợi

Trong khi ứng dụng của bạn đang ở chế độ bảo trì, sẽ không có công việc được xếp hàng đợi được xử lý. Các công việc sẽ tiếp tục được xử lý như bình thường khi ứng dụng hết chế độ bảo trì.

Các lựa chọn thay thế cho chế độ bảo trì

Vì chế độ bảo trì đòi hỏi ứng dụng của bạn cần có một vài giây của thời gian chết, hãy xem xét lựa chọn thay thế như Laravel Vapor và Envoyer để thực hiện triển khai zero-thời gian chết với Laravel.

» Tiếp: Cấu trúc thư mục
« Trước: Cài đặt
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!