Tạo module Backend, Frontend và Api với Laravel 5.7 (version 2)

Sharing is caring!

Hôm nay có thời gian rãnh rỗi. Tui viết lại bài tạo module version 2 để cập nhật lại cho bài lần trước, về cơ bản thì cũng không khác gì, nhưng có một số thay đổi khi load route và views cho từng module. Bài này tui dùng Laravel 5.7 nhé, và coi như các bạn đã cài WAMP Server rồi nhé.

1. Tạo project:

Hôm nay là ngày 01/12, cho nên tui chọn tên project là hestia nhé. Giả sử, thư mục WEB_ROOT cho project này hiện lại là E:\Server\www\learning:

Chờ đến khi nó chạy xong như hình sau:

Khi đó trong thư mục hestia, chúng ta sẽ có cây thư mục như sau:

Để đơn giản, tui không tạo virtual host để trỏ vào thư mục hestia/public mà tui sẽ dùng cái Web Server có sẵn của laravel để run cái project này luôn. Chuyển vào thư mục hestia, run command sau:

Mở Chrome hay FireFox lên, chạy http://localhost:9000/, nếu nó hiện ra cái trang Laravel to đùng thì ổn.

Nếu các bạn bỏ tham số –port=9000 thì mặc định Web Server nó sẽ listen ở port 8000 nha.

2. Tạo module Backend, Frontend và Api:

Tại thư mục app, các bạn tạo thư mục Modules và các thư mục con tương ứng như sau:

Chú ý: trong thự mục Modules/Api, không có thư mục Views nha, lý do là Api không cần render views.

Tại thư mục config, các bạn tạo một file tên là modules.php:

Với nội dung như sau:

Mục đích của việc tạo file modules.php để đễ dàng quản lý việc load routes cũng như views theo từng module tương ứng. Tiếp theo, các bạn tạo một Service Provider để nó kiểm tra và load module tương ứng. Tại thư mục app/Modules, các bạn tạo một file tên là ModuleServiceProvider.php:

Với nội dung sau (hơi bị dài nha):

Thực chất là tui sẽ dùng cái ModuleServiceProvider.php này để thay thế cho cái file Provider/RouteServiceProvider.php mặc định của Laravel.

Đối với hàm mapApi(), do tui muốn là có nhiều file route tương ứng với từng version cho api, kiểu như là:

  • v1.route.php, tương ứng với api/v1/*
  • v2.route.php, tương ứng với api/v2/*

Cho nên sẽ có phần scandir cho thư mục Api/Routes để lấy cái version name cho từng route.

Edit file config/app.php để load cái Modules/ModuleServiceProvider.php và unload cái Provider/RouteServiceProvider.php. Mở file config/app.php, tìm đến cái array ‘providers’:

comment cái dòng App\Providers\RouteServiceProvider::class,

và thêm App\Modules\ModuleServiceProvider::class,

Để cho chắc chắn rằng Laravel 5 nó hiểu cái namespace App\Modules, chúng ta mở file composer.json, tìm đến mục psr-4 nằm trong mục autoload, thêm “App\\Modules”: “app/Modules” ngay bên dưới “App\\”: “app/”:

Để chắc ăn, các bạn nên stop Web Server (ấn Ctrl + C) và start lại nhé.

3. Tạo route cho từng module

Ở phần này, tui sẽ map route với Controller@action nhé.

3.1. Backend module:

Các bạn tạo các file như sau:

Nội dung các file tương ứng như sau:

Backend/Controllers/Controller.php:

Backend/Controllers/HomeController.php:

Backend/Routes/web.php:

Backend/Views/home/welcome.blade.php:

Kết quả:

3.2. Frontend Module:

Cũng tạo các file giống như Backend:

Nội dung thì y chang, chỉ khác cái namespace và nội dung message:

Frontend/Controllers/Controller.php:

Frontend/Controllers/HomeController.php:

Frontend/Routes/web.php:

Frontend/Views/home/welcome.blade.php:

Kết quả:

3.3. Api Module:

Tạo các file sau:

Nội dung các file như sau:

Api/Controllers/Controller.php:

Api/Controllers/V1Controller.php:

Api/Routes/v1.route.php:

Kết quả trên Postman:

 

Vậy là xong roài đó. Hy vọng giúp ích được cho các bạn.  THANK-YOU

Sharing is caring!

Redis Pub/Sub - Cơ chế hoạt động - Cài đặt trên Windows

Vincent Le

Tui là Lê Minh Đạt, tên tiếng anh là Vincent(do thích nhân vật Vincent Valentine, ai từng là fan của trò Final Fantasy VII thì sẽ biết nhân vật này, hehe). Đang tập tành làm một blogger viết về mảng lập trình, mong muốn được chia sẻ những gì đã học được, tích góp được trong 10 năm đi làm thợ code.

shares