Cấu trúc thư mục mặc định của Laravel nhằm cung cấp một khởi đầu tốt cho tất cả các application lớn và nhỏ. Nhưng bạn có thể tự tổ chức theo cách mà bạn muốn. Laravel sẽ gần như không áp đặt một hạn chế nào về mặt vị trí cho bất cứ class nào, miễn là Composer có thể load class đó.
Khi mới bắt đầu với Laravel, nhiều người phát triển cảm thấy bị thiếu thư mục models
. Tuy nhiên, việc thiếu đó là chủ đích của chúng tôi. Chúng tôi thấy từ "models" rất là mơ hồ, vì nó có nhiều ý nghĩa khác nhau tuỳ theo nhà phát triển. Một số nhà phát triển nghĩ rằng "model" sẽ là tổng hợp tất cả business logic, nhưng một số khác lại cho rằng "model" là một lớp tương tác với database.
Vì lý do đó, chúng tôi đã chọn nơi chứa mặc định của Eloquent model là ở trong thư mục app
, và cho phép nhà phát triển lưu lại nơi chứa nếu họ muốn.
Thư mục app
là nơi chứa phần core code của application. Chúng tôi sẽ sớm chia thư mục này ra, cho rõ ràng hơn, nhưng hầu như tất cả các class sẽ nằm trong thư mục này.
Thư mục bootstrap
sẽ chứa file app.php
dành cho khởi động framework. Thư mục này cũng chứa thư mục cache
dành cho framework, tạo ra các file để tối ưu hoá tốc độ cho route và service.
Thư mục config
mang ý nghĩa rất dễ hiểu, nó dùng để chứa tất cả các file config cho application của bạn. Nó là một ý tưởng tốt để đọc tất cả các file và làm quen với các biến có sẵn trong đó.
Thư mục database
chứa các file migration cho database, các file factories để tạo fake data cho model, và các file seed. Nếu bạn muốn, bạn cũng có thể dùng thư mục này để chứa các file SQLite database.
Thư mục public
chứa file index.php
là điểm khởi đầu vào cho mọi request gửi tới application của bạn và các file config autoloading. Thư mục này cũng chứa các file images, JavaScript, và CSS.
Thư mục resources
chứa file view cũng như file raw, và các file chưa được biên dịch như là LESS, SASS, hoặc JavaScript. Thư mục này cũng chứa những file language.
Thư mục routes
chứa tất cả các file định nghĩa route cho application của bạn. Mặc đinh, sẽ bao gồm những file sau đây: web.php
, api.php
, console.php
và channels.php
.
File web.php
sẽ chứa những route mà được load bởi file RouteServiceProvider
và lưu trữ những route đó vào trong một group middleware có tên là web
, middleware này cung cấp session, bảo vệ route trước các cuộc tấn công CSRF và mã hoá cookie. Nếu application của bạn chỉ dùng session và không dùng RESTful API, thì tất cả route của bạn có thế được định nghĩa trong file web.php
.
File api.php
chứa những route mà được load bởi file RouteServiceProvider
và lưu trữ những route đó vào trong một group middleware có tên là api
, middleware này cung cấp giới hạn chạy cho những route đó. Những route này sẽ được chủ đích là không dùng session, vì vậy request đến application của bạn thông qua những route này sẽ được authenticated thông qua token và không có quyền truy cập vào session.
File console.php
là nơi bạn có thể định nghĩa tất cả các Closure dựa trên các lệnh chạy ở console. Mỗi Closure sẽ tương ứng với một câu lệnh, nên bạn sẽ dễ dàng tiếp cận được với các phương thức input và output của mỗi câu lệnh. File này sẽ không định nghĩa các Http route của application, mà nó chỉ định nghĩa các console route tới application của bạn.
File channels.php
sẽ là nơi mà bạn có thể đăng ký các tất cả các event broadcasting channel mà application bạn hỗ trợ.
Thư mục storage
sẽ chứa những file Blade đã được biên dịch, file session, file cache, và các file khác được tạo ra bởi framework. Thư mục này sẽ chứa các thư mục con là: app
, framework
, và logs
. Thư mục app
có thể dùng để lưu tất cả các file được tạo ra bởi application của bạn. Thư mục framework
sẽ dùng để lưu các file được tạo ra bởi framework và cache, Cuối cùng là thư mục logs
, được dùng để chứa các file log của application.
Thư mục storage/app/public
có thể được dùng để lưu trữ các file mà user tạo như là: avatars, những loại mà được phép public. Bạn cũng nên tạo một link ảo public/storage
để trỏ vào thư mục này. Bạn có thể tạo link ảo đó bằng câu lệnh sau: php artisan storage:link
.
Thư mục tests
sẽ chứa các file test tự động. Mặc định, một ví dụ PHPUnit test mẫu sẽ được khởi tạo sẵn trong project. Mỗi class test nên lưu lại với hậu tố là Test
. Bạn có thể chạy test của bạn bằng câu lệnh phpunit
hoặc php vendor/bin/phpunit
.
Thư mục vendor
chứa những library mà được quản lý bởi Composer.
Phần lớn application của bạn sẽ được lưu trong thư mục app
. Mặc định, thư mục này sẽ được lưu dưới tên là App
và được autoloaded bởi Composer dùng chuẩn PSR-4 autoloading standard.
Thư mục app
sẽ chứa một số thư mục bổ sung như Console
, Http
, và Providers
. Hãy nghĩ các thư mục Console
và Http
như là các thư mục cung cấp API cho phần core của application của bạn. Giao thức HTTP và CLI đều là các cơ chế để bên ngoài tương tác với application của bạn, nhưng thực tế chúng lại không hay chứa logic của application. Nói cách khác, chúng là hai cách để gọi đến application của bạn. Thư mục Console
chứa tất cả các lệnh Artisan của bạn, và thư mục Http
chứa các class controllers, middleware, và requests của bạn.
Các thư mục khác sẽ được tạo trong thư mục app
khi bạn dùng lệnh Artisan make
để tạo các class tương ứng với thư mục đó. Ví dụ, bình thường, thư mục app/Jobs
sẽ không tồn tại cho đến khi bạn chạy lệnh Artisan make:job
để tạo class job.
{tip} Nhiều class trong thư mục
app
có thể được tạo ra thông qua lệnh Artisan. Để có thể xem các lệnh đó, bạn có chạy lệnhphp artisan list make
trên terminal của bạn.
Broadcasting
Thư mục Broadcasting
chứa tất cả các class broadcast channel cho ứng dụng của bạn. Các class này được tạo ra bằng lệnh make:channel
. Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn khi bạn tạo channel đầu tiên. Để tìm hiểu thêm về các channel, hãy xem tài liệu về event broadcasting.
Thư mục Console
sẽ chứa tất cả các câu lệnh Artisan của bạn. Các câu lệnh mới có thể được tạo ra bằng câu lệnh make:command
. Thư mục đó cũng chứa những phần kernel của console, nó là nơi dành cho việc đăng ký các câu lệnh Artisan của bạn và các scheduled tasks mà bạn đã cài đặt.
Mặc định, thư mục này sẽ không tồn tại, nhưng nó sẽ được tạo khi bạn chạy lệnh Artisan event:generate
và make:event
. Thư mục Events
sẽ chứa các event classes. Events có thể được dùng thông báo cho các phần khác trong application của bạn rằng một hành động nào đó đã xảy ra, vì vậy nó rất linh hoạt và tách biệt.
Thư mục Exceptions
chứa những file xử lý exception cho application và nó cũng là một nơi tốt để lưu bất kỳ exception nào được tạo ra từ application của bạn. Nếu như bạn muốn tuỳ biến cách mà các exception được log hoặc được render, thì bạn nên sửa class Handler
trong thư mục này.
Thư mục Http
chứa các file controllers, middleware và form request. Hầu như tất cả các logic dùng để xử lý các request tới application của bạn đều được lưu tại đây trong thư mục này.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan make:job
. Thư mục Jobs
sẽ chứa các queueable jobs cho application của bạn. Jobs có thể được đưa vào hàng đợi hoặc chạy đồng bộ cùng với request hiện tại. Jobs mà được chạy đồng bộ cùng với request hiện tại đôi khi cũng có thể được gọi là "commands" vì chúng được triển khai theo command pattern.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan event:generate
hoặc make:listener
. Thư mục Listeners
sẽ chứa các class xử lý events cho bạn. Event listeners nhận vào một event instance và thực hiện logic phản hồi tướng ứng với sự kiện đã được kích hoạt. Ví dụ, một event UserRegistered
có thể được xủ lý bởi một listener SendWelcomeEmail
.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan make:mail
. Thư mục Mail
chứa tất cả các class cho việc tạo email được gửi đi bởi application của bạn. Đối tượng Mail cho phép bạn gói gọn tất cả logic của việc xây dựng email vào trong một class đơn giản, có thể được gửi bằng phương thức Mail::send
.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan make:notification
. Thư mục Notifications
chứa tất cả các thông báo "transactional" mà được gửi bởi application của bạn, như là một thông báo về một sự kiện xảy ra trong application của bạn. Tính năng thông báo của Laravel sẽ gửi thông báo đi qua nhiều driver khác nhau như email, Slack, SMS hoặc được lưu trữ trong cơ sở dữ liệu.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan make:policy
. Thư mục Policies
chứa các class về quyền trong application của bạn. Policies sẽ dùng để xác định xem một user có thể thực hiện một hành động nhất định đối với một resource hay không. Để có thêm thông tin, hãy đọc thêm ở authorization documentation.
Thư mục Providers
chứa tất cả các service providers cho application của bạn. Service providers sẽ khởi động application của bạn bằng binding services trong service container và đăng ký các event hoặc thực hiện bất kỳ các task nào khác để chuẩn bị application xử lý những request đến.
Trong một application mới, thư mục này sẽ chứa sẵn một số provider. Bạn có thể tự do thêm các provider mà bạn muốn vào thư mục này khi cần thiết.
Mặc định, thư mục này không tồn tại, nhưng nó sẽ được tạo ra cho bạn, nếu bạn chạy lệnh Artisan make:rule
. Thư mục Rules
chứa các tuỳ biến của các đối tượng validation rule. Rules được sử dụng để đóng gói các logic kiểm tra phức tạp trong một đối tượng đơn giản. Để có thêm thông tin, hãy đọc thêm ở validation documentation.
entry