Cài đặt có thể chỉnh sửa bởi Admin mà không cần mã nguồn phức tạp
Các ứng dụng luôn đối mặt với một vấn đề thường trực. Một số cài đặt nằm trong file .env. Những cài đặt khác cần phải thay đổi thông qua bảng điều khiển admin mà không cần phải triển khai (deploy) lại mã nguồn. Ví dụ bao gồm tên trang web, múi giờ, hoặc các cài đặt đăng ký.
Nhiều lập trình viên lưu trữ những thứ này trong cơ sở dữ liệu nhưng lại tạo ra một mớ hỗn độn. Bạn sẽ kết thúc với hai cách để đọc dữ liệu. Một phần của ứng dụng sử dụng config() trong khi phần khác lại sử dụng một database model. Điều này dẫn đến các lỗi khi các cài đặt không đồng nhất.
Bạn có thể tránh điều này bằng cách sử dụng một đường dẫn đọc duy nhất. Hãy coi cơ sở dữ liệu như một lớp phủ lên cấu hình (config) của bạn trong quá trình khởi động.
Đây là cách để xây dựng nó:
• Sử dụng một nguồn sự thật duy nhất (single source of truth). Cơ sở dữ liệu giữ giá trị, nhưng ứng dụng chỉ đọc thông qua config().
• Sử dụng các lớp có kiểu dữ liệu (typed classes). Thay vì sử dụng các mảng lỏng lẻo, hãy sử dụng các lớp với kiểu dữ liệu nghiêm ngặt. Điều này giúp ngăn chặn lỗi đánh máy và các lỗi tiềm ẩn.
• Tải các cài đặt trong quá trình khởi động (boot process). Sử dụng một service provider để lấy các giá trị từ cơ sở dữ liệu và đẩy chúng vào mảng config.
Hãy cẩn thận với hai cái bẫy kỹ thuật sau:
Bẫy Múi giờ Laravel thiết lập múi giờ rất sớm trong quá trình khởi động. Nếu bạn thay đổi giá trị config sau đó, PHP vẫn sẽ sử dụng múi giờ cũ. Bạn phải gọi
date_default_timezone_set()một cách thủ công để đồng bộ hóa cài đặt toàn cục của PHP với giá trị config mới của bạn.Bẫy Cài đặt mới Một ứng dụng mới sẽ chưa có các bảng cơ sở dữ liệu. Nếu quá trình khởi động của bạn thất bại vì thiếu bảng cài đặt, ứng dụng sẽ không thể khởi động. Bạn không thể chạy migrations nếu ứng dụng không thể khởi động. Hãy bao bọc logic cài đặt của bạn trong một khối
try/catch. Điều này cho phép ứng dụng quay về sử dụng các giá trị mặc định trong.envcho đến khi bạn chạy migrations.
Một mẹo khác về bảo mật: Khi vô hiệu hóa một tính năng như đăng ký, đừng chỉ ẩn nút đó trên giao diện (UI). Hãy loại bỏ hoàn toàn tính năng đó khỏi config. Nếu bạn loại bỏ tính năng khỏi config, các route cũng sẽ biến mất. Một biểu mẫu bị ẩn nhưng vẫn có endpoint đang hoạt động là một rủi ro bảo mật. Một route bị thiếu sẽ trả về lỗi 404.
Hãy giữ cho mã nguồn của bạn đơn giản. Các controller và view của bạn không nên biết liệu một cài đặt đến từ một file hay từ cơ sở dữ liệu. Chúng chỉ nên nhìn thấy config().
Source: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
