Tìm hiểu cách custom (chia nhỏ) Route trong Laravel

335
cách custom route trong laravel

Khi code project ta thường chia nhỏ module ra cho dễ quản lí và bảo trì source code sau này. Ví dụ: Trong folder views chia thành 2 folder nhỏ là Admin chứa các file blade cho user có quyền admin (CRUD) và Page chứa các file blade cho user có quyền là user normal hoặc vãng lai.

Trong folder routes cũng chia thành 2 file nhỏ là web.php cho web và api.php cho API. Vậy nếu trong folder này bạn muốn có thêm 1 file admin.php chỉ để phục vụ cho phần điều hướng đến admin thì được không nhỉ? Hoàn toàn được bạn nhé, mời bạn cùng mình tìm hiểu trong bài viết này.

RouteServiceProvider có gì?

Bạn vào file RouteServiceProvider theo đường dẫn app/Providers/RouteServiceProvider.php và nhìn vào hàm map của class này

Hàm này có chức năng mapping các file route vào service provider để ta có thể sử dụng được các route đã định nghĩa trong folder routes. Cụ thể nó gọi đến 2 hàm khác là mapApiRoutes dùng để map route từ file api.php và mapWebRoutes từ web.php, cùng xem 2 method đấy có gì.

Hàm mapWebRoutes

  • middleware(‘web’) => Các route được định nghĩa trong web.php sử dụng middleware web.
  • namespace($this->namespace) => với $this->namespace đã được khai báo trong class RouteServiceProvider protected $namespace = 'App\Http\Controllers';, nghĩa là các route được define trong web.php sử dụng namespace App\Http\Controllers.
  • group(base_path(‘routes/web.php’) => Gom nhóm các route trong routes/web.php thành một group.
  Mò mẫm một chút về Service Provider trong Laravel
  Laravel đã xử lý một request như thế nào?

Tương tự với hàm mapApiRoutes

Hàm này khác 1 chỗ với mapWebRoutes là prefix('api') => Các route được định nghĩa trong api.php đều có prefix là api. Đó là lý do tại sao khi viết API thì ta phải truy cập vào route có prefix api phía trước.

Custom Route

Ok, từ những thứ vừa tìm hiểu ở phía trên thì bây giờ ta thử giải quyết vấn đề đã nêu ra từ đầu bài: Vậy nếu trong folder này bạn muốn có thêm 1 file admin.php chỉ để phục vụ cho phần điều hướng đến admin thì được không nhỉ?

Thứ tự thực hiện gồm:

1. Tạo file routes/admin.php: Bạn tự làm nhé

2. Tạo hàm mapAdminRoutes trong class RouteServiceProvider để map routes có

  • prefix là admin
  • namespace là App\Http\Controllers\Admin
  • Gom nhóm các route từ routes/admin.php

Nó sẽ trông như thế này:

Để cho nhanh thì mình làm ntn. Còn trong project nếu muốn thì bạn làm cho quy củ nhá: định nghĩa property namespaceAdmin, middleware…

3. Gọi hàm mapAdminRoutes trong hàm map của class RouteServiceProvider

Giờ test xem nó đã chạy đúng theo như lý thuyết chưa thôi nào.

4. Test

  • Tạo AdminController.php có namespace là App\Http\Controllers\Admintrong App\Http\Controllers\Admin, định nghĩa hàm index() return ra chuỗi 'Admin Dashboard'.
  • Định nghĩa route trong routes/admin.php call đến hàm index() trong AdminController.php.

AdminController.php

routes/admin.php

Giờ chúng ta thử php artisan serve rồi vào http://localhost:8000/admin xem nó như thế nào nhé.

Và đây là kết quả:

Vậy là nó trả ra chuỗi ‘Admin Dashboard’ từ hàm index() trong AdminController đúng như các bước mình đã làm rồi.

Kết luận

Trên đây mình đã giới thiệu với bạn cách custom Route trong Laravel như thế nào. Hi vọng từ bài viết này bạn áp dụng vào các project thực tế của mình. Nếu có thắc mắc và góp ý bạn comment phía dưới nhé. Cảm ơn các bạn!

Tham khảo: https://laravel-news.com/laravel-route-tips-to-improve-your-routing

TopDev via viblo

  Cách sử dụng Laravel với Socket.IO
  Các Laravel route tips giúp bạn cải thiện routing