Module trong Laravel là gì
Module trong Laravel là một chức năng được phát triển từ Laravel 5 và được sử dụng để quản lý từng chức năng nhỏ trong các dự án lớn. Tương tự như Package thì mỗi Module trong Laravel cũng có Views, Controller và Models của riêng nó.
Lợi ích của sử dụng Module đó chính là có thể quản lý dự án bằng theo các chức năng nhỏ, như thế trong các dự án lớn cần nhiều team và kỹ sư phát triển, thì mỗi người có thể độc lập phát triển các module nhỏ như vậy, sau đó lắp ráp lại mà không ảnh hưởng tới các phần khác của dự án.
Tạo và quản lý Module trong laravel bằng package
Khi chức năng Module được ra mắt ở Laravel 5, khi đó không có nhiều Package được phát triển để quản lý nó. Bởi vậy các nhà phát triển thường phải tự tạo ra Module theo cách thủ công để sử dụng.
Tuy nhiên theo thời gian thì có nhiều Package xuất hiện, và nổi bật nhất trong số chúng có thể kể đến đó chính là Laravel-Modules.
Ở phần tiếp theo, mình sẽ chia sẻ cách sử dụng package Laravel-Modules để quản lý Module trong Laravel nhé.
Laravel-Modules là gì
Laravel-Modules là một package được sử dụng để tạo và quản lý các chức năng của Laravel theo từng Module. Laravel-Modules được kỹ sư Nicolas Widart phát triển, có khả năng support cho tất cả các phiên bản Laravel phiên bản từ 5.4 trở lên.
Bạn có thể tìm thấy package này tại link gihub sau: nWidart/laravel-modules.
Doccument có thể tìm thấy tại https://docs.laravelmodules.com/.
Cấu trúc thư mục của Laravel-Modules
Package Laravel-Modules sẽ tự tạo ra thư mục mẹ để quản lý module, cũng như cấu trúc các file và folder cần thiết sử dụng cho từng module một cách tự động. Các công việc này nếu không có Laravel-Modules thì lập trình viên phải tự tạo theo cách thủ công hoàn toàn.
Cấu trúc thư mục của Laravel-Modules tổng quát như sau:
app/
bootstrap/
vendor/
Modules/
└── Blog/
├── Assets/
├── Config/
├── Console/
├── Database/
| ├── Migrations/
| └── Seeders/
├── Entities/
├── Http/
| ├── Controllers/
| ├── Middleware/
| └── Requests/
├── Providers/
| ├── BlogServiceProvider.php
| └── RouteServiceProvider.php
├── Resources/
| ├── assets/
| ├── lang/
| └── views/
├── Routes/
├── Repositories/
├── Tests/
├── composer.json
├── module.json
├── package.json
└── webpack.mix.js
Cài đặt Laravel-Modules
Yêu cầu là bạn đã cài composer trong máy của mình. Hãy chạy lệnh dưới để cài Laravel-Modules vào project
COPYcomposer require nwidart/laravel-modules
Khi đó, composer sẽ tự kiểm tra phiên bản Laravel hiện tại của bạn rồi tải và cài đặt gói Laravel-Modules tương ứng.
Sau đó chạy lệnh sau để khai báo ServiceProvider:
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
Tiếp theo, hãy khai báo Laravel-Modules trong composer.json bằng cách mở file này và thêm dòng code sau vào mục autoload/psr-4
:
COPY{
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
}
Đừng quên chạy lệnh dump-autoload
để nạp lại composer.json vào app.
composer dump-autoload
Tạo Module trong Laravel bằng Laravel-Modules
Để tạo một module mới, hãy chạy lệnh sau đây:
php artisan module:make <module-name>
Ví dụ lệnh tạo module Blog
:
php artisan module:make Blog
Khi đó, package sẽ tự tạo ra module Blog tại đường dẫn Modules/Blog
, với các thư mục và file theo cấu trúc thư mục ở phần trên.
Bạn cũng có thể tạo đồng thời nhiều module bằng cách viết liên tiếp tên các module cần tạo cách nhau bởi dấu cách:
php artisan module:make Blog Customers Contacts Users Invoices Quotes
Truy cập vào các view trong module
Về mặc định các file view sẽ được chứa trong thư mục Modules\Blog\Resources\views
. Để truy cập và sử dụng các view này, chúng ta sử dụng namespace của chúng.
Ví dụ chúng ta có 2 view là index.blade.php
và listUser.blade.php
như sau:
App/
Modules/
├── Blog
│ ├── Resources
│ │ ├── views
│ │ ├── index.blade.php
│ │ ├── User
│ │ └── listUser.blade.php
Chúng ta có thể truy cập tới 2 view này bằng lệnh:
view('blog::index')
view('blog::User.listUser')
Ví dụ như sử dụng chúng trong controler chẳng hạn:
class BlogController extends Controller
{
public function home()
{
if (true) {
return view('blog::index');
}else{
return view('blog::User.listUser');
}
}
}
Tổng kết
Trên đây mình đã chia sẻ cách Module hóa dự án bằng package Laravel-Modules rồi. Hi vọng nó sẽ có ích cho mọi người.