Laravel: Cấu trúc thư mục


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

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, JavaScriptCSS.

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.phpapi.phpconsole.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 appframework 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ư ConsoleHttp, 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ệnh php 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.

» Tiếp: Bộ công cụ khởi đầu (Starter Kits)
« Trước: Cấu hình
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!