Module hóa dự án bằng package Laravel-Modules

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.

Laravel-Modules.png

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.

make-module.png

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.

Related Posts