Giới thiệu

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 đó.

Thư mục Model sẽ ở đâu?

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 gốc

Thư mục App

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

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

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

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

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

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

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.phpchannels.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

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

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

Thư mục vendor chứa những library mà được quản lý bởi Composer.

Thư mục App

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 ConsoleHttp 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ệnh php artisan list make trên terminal của bạn.

Thư mục 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

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.

Thư mục Events

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:generatemake: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

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

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.

Thư mục Jobs

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.

Thư mục Listeners

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.

Thư mục Mail

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.

Thư mục Notifications

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.

Thư mục Policies

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

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.

Thư mục Rules

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.

Configuration Homestead
© 2023 by Logo page doc-vn