Laravel: Cấu trúc thư mục
Giới thiệu
Cấu trúc ứng dụng Laravel mặc định nhằm cung cấp một điểm khởi đầu tuyệt vời cho cả các ứng dụng lớn và nhỏ. Nhưng bạn có thể tự do sắp xếp ứng dụng của mình theo cách bạn muốn. Laravel hầu như không áp đặt bất kỳ hạn chế nào đối với vị trí của bất kỳ lớp nhất định nào - miễn là Composer có thể tự động tải lớp đó.
Thư mục gốc
Thư mục app
Thư mục app
chứa mã lõi của ứng dụng của bạn. Ta sẽ khám phá thư mục này chi tiết hơn ở ngay dưới đây; tuy nhiên, hầu hết tất cả các lớp trong ứng dụng của bạn sẽ nằm trong thư mục này.
Thư mục bootstrap
Thư mục bootstrap
chứa file app.php
để khởi động framework. Thư mục này cũng chứa một thư mục cache
trong đó chứa các file được tạo framework để tối ưu hóa hiệu suất, chẳng hạn như file services.php. Bạn thường không cần phải sửa đổi bất kỳ file nào trong thư mục này.
Thư mục config
Thư mục config
, như tên của nó, chứa tất cả các tệp cấu hình ứng dụng của bạn. Bạn nên đọc qua tất cả các tệp này và tự làm quen với tất cả các tùy chọn có sẵn đó.
Thư mục database
Thư mục database
chứa các thư mục migrations cho cơ sở dữ liệu, thư mục factories cho model, và thư mục seeds. Nếu muốn, bạn cũng có thể sử dụng thư mục database này để chứa cơ sở dữ liệu SQLite.
Thư mục public
Thư mục public
chứa file index.php
, là điểm đầu vào (bắt đầu) cho tất cả các yêu cầu đầu vào của ứng dụng của bạn và cấu hình tự động tải. Thư mục này cũng chứa các nội dung khác như hình ảnh, JavaScript và CSS.
Thư mục resources
Thư mục resources
chứa các Views của bạn cũng như các nội dung thô, chưa được biên dịch của bạn, chẳng hạn như CSS hoặc JavaScript. Thư mục này cũng chứa tất cả các tệp ngôn ngữ của bạn.
Thư mục routes
Thư mục routes
chứa tất cả các định nghĩa route (liên kết điều hướng) cho ứng dụng của bạn. Theo mặc định, các file sau được tích hợp trong thư mục routes: web.php
, api.php
, console.php
, và channels.php
.
File web.php
có chứa các route trong đó đặt RouteServiceProvider
trong nhóm middleware web
, với các mục đích cung cấp trạng thái phiên, bảo vệ CSRF, và mã hóa cookie. Nếu ứng dụng của bạn không cung cấp API RESTful, không trạng thái thì có khả năng là tất cả các route của bạn rất có thể sẽ được xác định trong file web.php
.
File api.php
có chứa các route trong đó đặt RouteServiceProvider
trong nhóm middleware api
. Các route này nhằm mục đích không có trạng thái, vì vậy các yêu cầu đầu vào ứng dụng thông qua các route này nhằm mục đích được xác thực thông qua mã thông báo và sẽ không có quyền truy cập vào trạng thái phiên.
File console.php
là nơi bạn có thể định nghĩa tất cả các lệnh console dựa trên closure (bao đóng) của bạn. Mỗi bao đóng được liên kết với một cá thể lệnh cho phép một cách tiếp cận đơn giản để tương tác với các phương thức IO của mỗi lệnh. Mặc dù tệp này không định nghĩa các route HTTP, nhưng nó định nghĩa console dựa trên điểm đầu vào (các route) vào ứng dụng của bạn.
File channels.php
là nơi bạn có thể đăng ký tất cả các kênh broadcasting hỗ trợ ứng dụng của bạn.
Thư mục storage
Thư mục storage
chứa nhật ký của bạn, các mẫu Blade đã biên dịch, phiên dựa trên tệp, bộ đệm tệp và các tệp khác được tạo bởi framework Laravel. Thư mục này bao gồm các thư mục con app
, framework
và logs
. Thư mục app
có thể được sử dụng để lưu trữ bất kỳ tệp nào do ứng dụng của bạn tạo ra. Thư mục framework
được sử dụng để lưu trữ các tệp và bộ đệm được tạo framework. Cuối cùng, thư mục logs
chứa các tệp nhật ký ứng dụng của bạn.
Thư mục storage/app/public
có thể được sử dụng để lưu trữ các tệp do người dùng tạo, chẳng hạn như ảnh đại diện hồ sơ, có thể truy cập công khai. Bạn nên tạo một liên kết tượng trưng public/storage
trỏ đến thư mục này. Bạn có thể tạo liên kết bằng lệnh Artisan php artisan storage:link
.
Thư mục tests
Thư mục tests
chứa các mục kiểm tra tự động của bạn. Ví dụ về các mục kiểm tra đơn vị PHPUnit và các mục kiểm tra tính năng được cung cấp ngay lập tức. Mỗi lớp kiểm tra nên được gắn với từ Test
. Bạn có thể chạy các bài kiểm tra của mình bằng cách sử dụng các lệnh phpunit
hoặc php vendor/bin/phpunit
. Hoặc, nếu bạn muốn trình bày chi tiết và đẹp hơn về kết quả thử nghiệm của mình, bạn có thể chạy thử nghiệm bằng lệnh Artisan php artisan test
.
Thư mục vendor
Thư mục vendor
chứa các dependency Composer của bạn.
Thư mục app
Phần lớn ứng dụng của bạn được đặt trong thư mục app
. Theo mặc định, thư mục này có không gian tên bên dưới App
và được tự động nạp bởi Composer bằng cách sử dụng tiêu chuẩn tự động tải PSR-4.
Thư mục app
chứa nhiều thư mục bổ sung như Console
, Http
, và Providers
. Hãy coi thư mục Console
và Http
giống như việc cung cấp một API vào cốt lõi của ứng dụng của bạn. Giao thức HTTP và CLI đều là cơ chế tương tác với ứng dụng của bạn, nhưng không thực sự chứa logic ứng dụng. Nói cách khác, chúng là hai cách phát lệnh cho ứng dụng của bạn. Thư mục Console
chứa tất cả các lệnh Artisan của bạn, trong khi thư mục Http
chứa các controller, các middleware, và các request.
Một loạt các thư mục khác sẽ được tạo bên trong thư mục app
khi bạn sử dụng các lệnh Artisan make
để tạo các lớp. Vì vậy, ví dụ, thư mục app/Jobs
sẽ không tồn tại cho đến khi bạn thực hiện lệnh Artisan make:job
để tạo một lớp job.
Nhiều lớp trong thư mục app có thể được tạo bởi Artisan thông qua các lệnh. Để xem lại các lệnh có sẵn, hãy chạy lệnhphp artisan list make
trong terminal của bạn.
Thư mục Broadcasting
Thư mục Broadcasting
chứa tất cả các lớp kênh quảng bá cho ứng dụng của bạn. Các lớp này được tạo bằng lệnh make:channel
. Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn khi bạn tạo kênh đầu tiên của mình. Để tìm hiểu thêm về các kênh, hãy xem tài liệu về broadcasting.
Thư mục Console
Thư mục Console
chứa tất cả các lệnh Artisan tùy chỉnh cho ứng dụng của bạn. Các lệnh này có thể được tạo bằng lệnh make:command
. Thư mục này cũng chứa nhân (kernel) console của bạn, đây là nơi đăng ký các lệnh Artisan tùy chỉnh của bạn và định nghĩa các tác vụ đã lên lịch của bạn.
Thư mục Events
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn bằng lệnh Artisan event:generate
và make:event
. Thư mục Events
chứa các lớp sự kiện. Các sự kiện có thể được sử dụng để cảnh báo các phần khác trong ứng dụng của bạn rằng một hành động cụ thể đã xảy ra, mang lại sự linh hoạt và khả năng phân tách.
Thư mục Exceptions
Thư mục Exceptions
chứa trình xử lý ngoại lệ của ứng dụng của bạn và cũng là nơi tốt để đặt bất kỳ ngoại lệ nào do ứng dụng của bạn đưa ra. Nếu bạn muốn tùy chỉnh cách các ngoại lệ của bạn được ghi lại hoặc hiển thị, bạn nên sửa đổi lớp Handler
trong thư mục này.
Thư mục Http
Thư mục Http
chứa các controller, các middleware, và các form request. Hầu như tất cả logic để xử lý các yêu cầu đầu vào vào ứng dụng của bạn sẽ được đặt trong thư mục này.
Thư mục Jobs
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:job
. Thư mục Jobs
chứa các công việc có thể xếp hàng đợi cho ứng dụng của bạn. Công việc có thể được ứng dụng của bạn xếp hàng đợi hoặc chạy đồng bộ trong vòng đời yêu cầu hiện tại. Các công việc chạy đồng bộ trong quá trình yêu cầu hiện tại đôi khi được gọi là "lệnh" vì chúng là sự triển khai của mẫu lệnh.
Danh mục Listeners
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan event:generate
hoặc make:listener
. Thư mục Listeners
chứa các lớp xử lý các sự kiện của bạn. Trình nghe sự kiện nhận được một cá thể sự kiện và thực hiện logic để phản hồi lại sự kiện đang được kích hoạt. Ví dụ, một sự kiện UserRegistered
có thể được xử lý bởi một trình nghe SendWelcomeEmail
.
Thư mục Mail
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:mail
. Thư mục Mail
chứa tất cả các lớp đại diện cho các email được gửi bởi ứng dụng của bạn. Đối tượng mail cho phép bạn đóng gói tất cả logic của việc xây dựng email trong một lớp đơn giản, có thể được gửi bằng phương thức Mail::send
.
Thư mục Models
Thư mục Models
chứa tất cả các lớp mô hình Eloquent của bạn. ORM Eloquent có sẵn trong Laravel cung cấp một triển khai ActiveRecord đơn giản, đẹp mắt để làm việc với cơ sở dữ liệu của bạn. Mỗi bảng cơ sở dữ liệu có một "Model" tương ứng được sử dụng để tương tác với bảng đó. Model cho phép bạn truy vấn dữ liệu trong bảng của mình, cũng như chèn các bản ghi mới vào bảng.
Thư mục Notifications
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:notification
. Thư mục Notifications
chứa tất cả các thông báo "giao dịch" được gửi bởi ứng dụng của bạn, chẳng hạn như các thông báo đơn giản về các sự kiện xảy ra trong ứng dụng của bạn. Tính năng thông báo của Laravel tóm tắt việc gửi thông báo qua nhiều trình điều khiển như email, Slack, SMS hoặc được lưu trữ trong cơ sở dữ liệu.
Thư mục Policies
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:policy
. Thư mục Policies
chứa các lớp chính sách ủy quyền cho ứng dụng của bạn. Các chính sách được sử dụng để xác định xem người dùng có thể thực hiện một hành động nhất định đối với tài nguyên hay không.
Thư mục Providers
Thư mục Providers
chứa tất cả các nhà cung cấp dịch vụ cho ứng dụng của bạn. Các nhà cung cấp dịch vụ khởi động ứng dụng của bạn bằng cách ràng buộc các dịch vụ trong vùng chứa dịch vụ, đăng ký sự kiện hoặc thực hiện bất kỳ tác vụ nào khác để chuẩn bị ứng dụng của bạn cho các yêu cầu đến.
Trong một ứng dụng Laravel mới, thư mục này sẽ chứa một số trình cung cấp. Bạn có thể tự do thêm các nhà cung cấp của riêng mình vào thư mục này nếu cần.
Thư mục Rules
Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:rule
. Thư mục Rules
chứa các đối tượng quy tắc xác thực tùy chỉnh cho ứng dụng của bạn. Các quy tắc được sử dụng để đóng gói logic xác nhận phức tạp trong một đối tượng đơn giản. Để biết thêm thông tin, hãy xem tài liệu xác nhận.