Theo mặc định, laravel giả định rằng bạn sẽ muốn có các cấu hình khác nhau cho các môi trường khác nhau. Ví dụ. trong môi trường thử nghiệm, bạn có thể muốn có tên người dùng và mật khẩu khác và trong môi trường sản xuất khác. Vì laravel có rất nhiều tệp cấu hình, nên việc quản lý tất cả những tệp đó nhanh chóng trở thành cơn ác mộng. Do đó laravel sử dụng các biến môi trường của PHP.
Điều cơ bản nói là nếu bạn muốn sử dụng các biến "môi trường", mà laravel sử dụng theo mặc định, bạn phải đặt tất cả các cấu hình của mình trong env()
phương pháp như đã được đề cập.
Nếu bạn không muốn làm điều này, ví dụ:đối với các dự án đơn giản, chỉ cần xóa env khỏi mã của bạn, như thế này.
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Lưu ý rằng bạn có thể trộn và kết hợp. tức là bạn có thể có một số biến trong env và một số biến độc lập.
Vậy tại sao lại sử dụng env
ở tất cả?
Giả sử ứng dụng của bạn có 100 người thử nghiệm, tất cả được đặt ở các vị trí khác nhau. Trong laravel, bạn phải viết mã khoảng 8-10 tệp cấu hình. Ngoài ra, bạn cần version-control
các tệp đó. Vì vậy, bạn có hai vấn đề trong tầm tay:
- Bạn không muốn gửi cho tất cả 100 người dùng thông tin đăng nhập giống nhau. Ngoài ra, họ có thể sử dụng cơ sở dữ liệu khác nhau, máy chủ bộ nhớ cache, v.v. có nghĩa là họ sẽ có các cấu hình khác nhau. Vì vậy, mỗi người dùng phải duy trì 8-10 tệp cấu hình đó bằng tay.
- Bạn không muốn gửi các tệp cấu hình này tới quyền kiểm soát phiên bản. Bởi vì nếu bạn làm vậy, cả thế giới sẽ biết bí mật API của bạn và có thể sẽ tận dụng điều đó (giống như mật khẩu). Ngoài ra, nếu bạn xem các tệp conf laravel, bạn sẽ nhận thấy rằng có các thông tin khác như múi giờ, thuộc tính gỡ lỗi, v.v. cũng có trong tệp conf và bạn muốn kiểm soát phiên bản chúng. Vậy làm cách nào để bạn kiểm soát phiên bản các tệp cấu hình như vậy mà vẫn ẩn thông tin nhạy cảm của mình.
Câu trả lời là env
biến. Laravel sử dụng dotenv
có thể tìm thấy tài liệu tại đây
. Về cơ bản, đây là các biến nằm trong một tệp có tên là .env
trong một cặp khóa-giá trị. Ví dụ:
Nội dung mẫu của tệp .env
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
Khi bạn xác định tệp .env của mình như vậy, bạn có thể nhận giá trị bằng cách sử dụng khóa như env('APP_DEBUG')
.
Vì vậy, điều này giải quyết vấn đề được đề cập ở trên theo những cách sau:
- bạn giữ
.env
nộp cho chính bạn. Và bạn cũng khai báo một tệp khác có tên là.env.example
là bản sao chính xác của tệp gốc ngoại trừ thực tế là nó chứa các giá trị mẫu, không phải các giá trị nhạy cảm của bạn. Sau đó, bạn chuyển tệp ví dụ mới này cho mọi người. Họ sẽ thay thế dữ liệu mẫu bằng thông tin nhạy cảm của riêng họ. - Vì bạn đang kiểm soát phiên bản của tệp ví dụ, bạn có thể kiểm soát phiên bản của tất cả các tệp conf của mình vì chúng không chứa bí mật. Bí mật nằm trong các tệp .env. Tất cả các tệp conf đó chứa các giá trị như sau
env('APP_KEY')
và giá trị thực được thay thế tại thời điểm chạy bằng tệp .env của bạn.