Laravel 5.5 cung cấp 4 route file api.php
, channels.php
, console.php
và web.php
.
Route web.php
dành cho giao diện web, api.php
thì cho các API, console.php
dành cho việc đăng kí artisan command còn channels.php
dành cho mục đích broadcasting.
Chúng ta đều đã biết những thứ này, và chẳng có gì mới mẻ cả !
Bài post giúp được gì?
Nếu bạn đang làm một app nhỏ và không có quá nhiều route để hoàn thiện app thì web.php
là đủ. Nhưng nếu như bạn có khoảng hơn 100 routes, ví dụ để dành cho Admin, cho khách hàng, cho các loại user (liên quan đến auth) và các route phổ biến có sẵn cho mọi visitor thì việc giữ tất cả các route với nhau vào 1 route file đơn sẽ khiến bạn không quản lý nổi các route của mình nữa.
Dưới đây là một giải pháp nhanh gọn lẹ dành cho bạn
Giả sử như chúng ta có 3 route :
- Cho cấp admin
- Cho cấp user [ có thể signup, login, quản lý profile v.v ]
- Các public route [ home, blog, contact page v.v ]
Bây giờ chúng ta sẽ tạo 2 thư mục trong routes
Các route directory đã đổi trong laravel 5.5
routes/web
— các route liên quan đến đường dẫn front-end chẳng hạn
routes/api
— các route liên quan đến API
Chúng ta vẫn để nguyên các route channels.php
và console.php
bên ngoài.
Tạo một file mới như admin.php
trong folder web sẽ chứa các route liên quan đến admin.
Tạo user.php
trong đó đại diện cho mọi route liên quan đến cấp user.
Phần mẹo tối ưu
Mở Providers/RouteServiceProvider.php
— file này phụ trách khởi tạo tất cả các route của app. Check method map()
để hiểu được cách nó nhận diện các route file khác nhau.
Check lại các method mapApiRoutes()
và mapWebRoutes()
, chúng chỉ trỏ vào đường dẫn mặc định của web.php
và api.php
tuy nhiên chúng ta đã move nó vào thư mục khác nên vì thế hãy thay đổi lại bằng cách khai báo:
Thay đổi base_path() của 2 method trên
admin.php
& user.php
trong RouteServiceProvider.php
<?php /** * Define the admin specific "web" routes for the application. * These routes all receive session state, CSRF protection, etc. * * @return void */ protected function mapAdminWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('admin') ->group(base_path('routes/web/admin.php')); } /** * Define the user specific "web" routes for the application. * These routes all receive session state, CSRF protection, etc. * * @return void */ protected function mapUserWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('user') ->group(base_path('routes/web/user.php'));
Tạo các method mới cho cả hai loại route
Hãy xem thử cách chúng tôi set prefix, controller namespace và middleware! Bạn có thể customize chúng trong mỗi app của mình.
Chỉ cần call chúng từ method map()
của RouteServiceProvider
.
<?php /** * Define the routes for the application. * * @return void */ public function map() { $this->mapApiRoutes(); //for api routes $this->mapWebRoutes(); //for our common web routes $this->mapAdminWebRoutes(); //for the admin web routes $this->mapUserWebRoutes(); //for user web routes }
Update lần lượt các method map()
Bước cuối cùng
Mở routes/web/user.php
và add thêm một số test route
<?php /* |-------------------------------------------------------------------------- | Web Routes for user type |-------------------------------------------------------------------------- | */ Route::get('/test', function () { return response('this is a test route', 200); });
Trỏ về your-laravel.dev/user/test
và bạn đã hoàn thành rồi.
Vậy là bạn đã tách các route khác nhau của app mình thành công rồi, đơn giản và dễ quản lý.
Tham khảo thêm các vị trí tuyển dụng Laravel lương cao