Khóa học Newnet Framework

Bài 10: Generate Module

NewNet Framework xây dựng các thành phần theo chuẩn cấu trúc của laravel 10.x. Mỗi một module trong folder lib như một laravel thu nhỏ, và chuẩn theo cấu trúc module được đăng tải trên https://packagist.org nên chúng ta hoàn toàn tin tưởng cấu trúc của nó phải gọi là chuẩn.

Khi download framework về, chúng ta có thể thấy folder modules, dây chính là nơi chứa những module chúng ta sắp sửa khai báo.

Để tạo module chúng ta chạy lệnh: php artisan cms:module.create  

Lưu ý: Không được tạo module với tên module đã tồn tại trong lib hoặc đã tạo trước đó

Tạo bước Enter Model Name dù chưa nghĩ ra model gì cũng nhập đại demo chẳng hạn. Và bước Select Module Pattern nên nhập 1 hoặc 2 để hệ thống generate ra module với những cấu trúc sẵn. Chúng ta chỉ cần sửa lại cho dễ. 

Sau khi báo thành công, module mới sẽ trông như này:

Lúc này, khi vào trang quản trị vẫn chưa thấy được module newnet vừa tạo đâu. Chúng ta cần nạp nó vào.

Có 2 cách nạp:

Cách 1: Khai báo bằng composer

Nhìn vào cuối file composer.json tại root application, tại phần repositories đã được khai báo sẵn cái giá trị path là các folder được khởi tạo sẵn trong framework. Nhờ vậy ta có thể dùng composer để cài đặt module vào hệ thống như cách cài các thư viện khác. Cách này sẽ tối ưu tốc độ nhờ sử dụng composer nên nó được autoload.

Dựa vào file composer.json được sinh ra bên trong module, chúng ta sẽ sử dụng name để chạy composer:

composer require module/newnet

Khi chạy xong, chúng ta vào admin sẽ thấy module này trên thanh menu. Nhưng truy cập vào sẽ lỗi đó nha, vì chưa có table bên trong database. Chúng ta khai báo các column trong file migrate và chạy lệnh php artisan migrate là hết lỗi nha.

 

Cách 2: Khai báo bằng file JSON

Chúng ta sẽ khai báo thêm file modules.json cùng cấp với file môi trường .env hay nói cách khác root application.

Bên trong này chúng ta sẽ khai báo như sau:

{
  "newnet": true
}

với newnet là module folder chúng ta vừa tạo ra. Thông thường là viết thường. Với giá trị true/false chúng ta dễ dàng bật tắt tính năng. Nhưng việc này dễ gây ra lỗi nếu chúng ta sử dụng nó bên ngoài module tức ở những module khác.

Cách này sẽ chậm hơn, vì sau khi nạp mọi thứ, hệ thống mới đọc đến file json này và nạp các module.

 

Hiện tại việc tạo các chức năng mà laravel hỗ trợ, chưa tự động đưa vào module và chúng ta cần. Cho nên chúng ta vẫn phải tạo bằng lệnh của laravel và copy chúng vào module nếu cần.

Lưu ý: Phải cập nhật lại namespace từ tiền tố App -> Modules\Module_name

Các thành phần cơ bản đã được khai báo trong Newnet\Module\Support\BaseModuleServiceProvider và được kế thừa trong từng module. 

Chúng ta hoàn toàn có thể override nếu cần.

Một số function chúng ta quan tâm:

  • registerPermissions: nơi đăng ký quyền khi khai báo thêm route khác crud
  • registerFrontendMenuBuilders: nơi nạp menu builder khi tạo menu. Xem lại tại đây
  • loadCommands: nơi khai báo các class commands thông qua function $this->commands([]) hoặc khai báo trực tiếp hàm này vào function boot