Thư mục "app" trong Laravel (App directory Laravel)

Trong bài trước chúng ta đã làm quen với cấu trúc cây thư mục của Laravel rồi phải không nào, trong bài hôm nay chúng ta sẽ tìm hiểu sâu hơn về một thư mục rất quan trọng của Laravel vì chúng ta thường sử dụng đến nó đó là thư mục app trong Laravel.

Bên trong thư mục app, chúng ta có thể dễ dàng thấy nó gồm có các thành phần như Console, Exceptions, Http, Providers...  nhưng đây liệu đó có phải là tất cả của nó. Câu trả lời sẽ có ở ngay dưới đây các bạn đừng sốt suột nhé!

1. Thư mục Console (The Console directory)

Thư mục console là nơi chứa các lệnh Artisan do chính bạn tạo ra trong ứng dụng với lệnh make:command trong commander. Nơi đây còn chứa file Kernel.php, nó sẽ thực hiện việc đăng ký các lệnh Artisan của riêng bạn, ngoài ra có thể đặt lịch trình tác vụ cho các lệnh Artisan ấy.

Chúng ta sẽ thử khởi tạo một câu lệnh Artisan, các bạn chạy lệnh sau:

php artisan make:command test

Lưu ý bạn cần chạy Cmder tại đúng thư mục chứa project Laraver, ví dụ của mình là C:\xampp\htdocs\laravel-tutorial. Nếu đang không đúng thư mục các bạn sử dụng lệnh cd tenduongdan để truy cập

Kiểm tra source project, ngay tại thư mục app/Console ta có thể thấy một thư mục Commands kèm theo file tên test.php đã được tạo ra. Có thể thấy sau này khi tạo thêm một command nào khác thì nó sẽ được quản lý ở đây.

2. Thư mục Exceptions (The Exceptions directory)

Cái tên nói lên tất cả thư mục Exceptions này sẽ chứa các xử lý ngoại lệ (exception handler) của ứng dụng. Nếu bạn muốn tùy chỉnh cách mà những exception này ghi lại hoặc hiển thị, thì hãy sửa đổi file Handler.php trong thư mục này. Tuy nhiên việc này cũng không cần thiết cho lắm vì Laravel đã làm quá tốt rồi nên tốt nhất là không động vào các bạn ạ :D 

3. Thư mục Http (The Http directory)

Thư mục này sẽ chứa các controller, middleware và form request. Ở đây cũng có File Kernel.php dùng để định nghĩa cho các middleware. Nói chung thư mục này sẽ chứa các thành phần sẽ xử lý các yêu cầu đến ứng dụng, chẳng hạn các request từ phía client.

4. Thư mục Providers (The Providers directory)

Thư mục Providers chứa tất cả các nhà cung cấp dịch vụ (service provider) cho ứng dụng của bạn. Các service provider này có nhiệm vụ khởi động ứng dụng bằng cách ràng buộc các service trong vùng chứa của nó, đăng ký các sự kiện hoặc thực thi các mã lệnh để chuẩn bị đáp ứng cho các request đến ứng dụng. Đây là một trong số các khái niệm kiến trúc (Architecture Concepts) của Laravel nên chắc chắn khá trừu tượng đúng không nào tuy nhiên bạn ơi đừng sợ mình sẽ nói rõ vấn đề này ở những bài sau.

5. Thư mục Broadcasting (The Broadcasting directory)

Thư mục Broadcasting này là nơi chứa tất cả các lớp broadcasting channel. Mặc định thì thư mục Broadcasting này không được khởi tạo trước, nó sẽ xuất hiện khi bạn tạo một lớp broadcasting channel đầu tiên với lệnh:

php artisan make:channel TestChannel

Quan sát source code chúng ta sẽ  thấy, thư mục Broadcasting đã được tạo ra cùng với class mình vừa khởi tạo bằng lệnh ban nãy.

Kể từ phần này trở đi, các thư mục mặc định không xuất hiện trong thư mục app mà chỉ được khởi tạo bằng lệnh như Broadcasting.

6. Thư mục Events (The Events directory)

Khởi đầu thư mục này không tồn tại trong App mà chúng ta sẽ khởi tạo. Để khởi tạo thư mục cũng như một lớp sự kiện (event class), chúng ta phải thực hiện chuỗi lệnh sau:

php artisan event:generate
php artisan make:event TestEvent

Quay lại xem source code chúng ta sẽ thấy thư mục Event được tạo

Nếu bạn chưa hiểu về event (sự kiện) thì hãy đọc đoạn dưới đây:

Ví dụ đơn giản khi bạn click vào nút đăng nhâp của một trang web nào đó , đó là sự kiện (event) đăng nhập, hoặc thêm sản phẩm vào giỏ hàng, đó là sự kiện thêm sản phẩm vào giỏ hàng... Laravel cung cấp cho ta event để nâng cao tính linh hoạt, tách rời và không phụ thuộc, giúp dễ quản lý và mở rộng hơn.

7. Thư mục Listeners (The Listeners directory)

Thư mục Listeners dùng để chứa các lớp xử lý các event ở trên, gọi là event listener (người lắng nghe sự kiện). Các event listener này sẽ hoạt động khi nhận được một event khởi tạo và thực thi nhiệm vụ được khai báo trước. Chẳng hạn như sự kiện UserRegisterd có thể xử lý bởi listener SendWelcomeEMail. Tức là khi listener SendWelcomeEmail lắng nghe được event UserRegistered khởi tạo thì nó sẽ thực thi gửi một email welcome rồi sau đó trả về cho người dùng biết là tài khoản đã được đăng ký.

Để khởi tạo thư mục Listener cũng như file listener, chúng ta sử dụng chuỗi lệnh sau:

php artisan event:generate

(Nếu đã thực hiện ở event thì có thể bỏ qua lệnh này)

Tiếp đó:

php artisan make:listener TestListener

8. Thư mục Jobs (The Jobs directory)

Thư mục Jobs chứa các lớp để sắp xếp các công việc vào hàng đợi, hoặc có thể chạy đồng bộ.

Để tạo một Job bạn chỉ cần thực thi lệnh:

php artisan make:job TestJob

9. Thư mục Mail (The Mail directory)

Thư mục Mail chứa tất cả các lớp đại diện cho từng email. Các mail object này gói gọn các xử lý của việc xây dựng email trong một lớp đơn giản, có thể gửi bằng Mail::send.

Để tạo một Mail, thực thi câu lệnh sau:

php artisan make:mail TestMail

10. Thư mục Notifications (The Notifications directory)

Dễ hiểu là thư mục này chứa các lớp giành cho việc thông báo các hoạt động của ứng dụng, chẳng hạn như thông báo đơn giản về các event đã xảy ra trong ứng dụng. Tính năng này thông qua nhiều driver khác nhau như SMS, email, Slack hoặc lưu trữ trong database.

Để khởi tạo Notifications chúng ta sử dụng câu lệnh:

php artisan make:notification TestNotification

11. Thư mục Policies (The Policies directory)

Theo Laravel Docs thì Policies là nơi chứa các class dùng để xác định xem client có thể thực hiện một hành động nào đó đối với tài nguyên hay không.

Chẳng hạn như bạn muốn chỉnh sửa bài viết nào đó thì Policies này sẽ kiểm tra xem bạn có phải là tác giả của bài viết đó hoặc là admin hay không? Nếu phải thì mới cho phép chỉnh sửa, còn không thì báo lỗi không đủ quyền.

Để tạo một Policies, bạn cũng thực thi lệnh Artisan sau:

php artisan make:policy TestPolicy

12. Thư mục Rules (The Rules directory)

Thư mục Rules có chức năng validate data từ request như khi chúng ta vẫn hay làm khi code PHP thuần vậy thế nhưng để tối ưu và dễ quản lý hơn  nó được tách rời riêng biệt để dễ dàng quản lý.

Chúng ta sử dụng lệnh Artisan dưới đây để tạo một Rules:

php artisan make:rule TestRule

13. User.php

Có bao giờ bạn thắc mắc Laravel là Framework chuẩn MVC vậy Model nằm ở đâu? Thực tế trong Laravel Docs khái niệm về Model rất mơ hồ với khá nhiều lý thuyết khác nhau. Thật vậy Laravel không tạo thư mục Model trong app mà thay vào đó nó cung cấp file User.php để người sử dụng tự đặt code theo ý muốn. Vì vậy các bạn có thể coi user.php là 1 Model.

14. Lời kết:

Vậy là chúng ta đã tìm hiểu bao quát hết 1 vòng cấu trúc trong app rồi đấy, tới đây chắc hẳn bạn đã năm được sơ sơ về framework này rồi chứ. Chúc các bạn học tốt!

Bình luận