Các Laravel route tips giúp bạn cải thiện routing
Laravel router có một bộ API rất hữu dụng và hoàn thiện dành cho bạn khi mới bước chân vào Laravel. Những tip dưới đây không phải là quá mới hay bí ẩn, nhưng sẽ giúp ích rất nhiều khi bạn học Laravel 5.
Custom Namespaces
Như đã nói, nếu bạn muốn một nhóm routes sử dụng một namespace như App\Http\Controllers\Admin
, bạn có thể xác định namespace bằng cách dùng fluent routing API có trong Laravel 5.4:
Route::namespace('Admin')->group(function () { // Controllers Within The "App\Http\Controllers\Admin" Namespace });
Đây chính là cách sử dụng trong RouteServiceProvider
tìm thấy trong mỗi Laravel project:
protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); }
Do file routes/web.php
có namespace, Admin
namespace cũng chỉ là tương đối.
Bạn có thể chạy console command sau để tạo các controller trên App\Http\Controllers\Admin
:
php artisan make:controller -r Admin/UsersController
Trong ví dụ routing trước, definition của chúng ta trong file routes/web.php
trông thế này:
Route::namespace('Admin') ->prefix('admin') ->group(function () { Route::resource('users', 'UsersController'); });
Route Macros
Router là macroable (Giải thích sơ qua: nó cho phép chúng ta thêm một phương thức hay có thể gọi là một macro,
vào một class có sẵn. ), nghĩa là nếu bạn có một nhóm routes mà bạn muốn cung cấp thông qua một package hoặc các nhóm route được cấu hình sẵn có thể tái sử dụng, bạn có thể define một macro trên một service provider.
Ví dụ, bạn có các shopping route cho một shop thương mại điện tử mà bạn đóng nó thành một package, và cho phép user override hoặc customize vài thành phần của routes:
// Inside a service provider boot() public function boot() { Route::macro('shopRoutes', function ($prefix) { Route::group([ 'prefix' => $prefix, 'middleware' => ['shopping'], ], function () { Route::get('products/{product}', 'ProductsController@show'); // ... }); }); }
Sau đó khách hàng có thể call macro trong app Laravel mới bên trong routes/web.php
:
collect(config('languages'))->each(function ($language) { Route::shopRoutes($language); });
Hoặc một implemention khác tương tự vậy:
Route::macro('shopRoutes', function ($languages) { Route::group([ 'prefix' => '/{language}', 'middleware' => ['shopping'], 'where' => ['language' => implode('|', $languages)], ], function () { Route::get('products/{product}', 'ProductsController@show'); // ... }); });
Các ví dụ về macro rất đa dạng, nhưng bạn chỉ cần nắm cái ý tưởng là được. Tôi đề xuất rằng bạn chỉ nên sử dụng route macro nếu bạn gặp trường hợp như trên. Bạn sẽ biết khi nào là cần thiết!
Debug Routes
Nếu bạn đang tìm mọi cách để find route hoặc debug tất cả các route, command artisan route:list
rất hữu ích:
artisan route:list +--------+----------+----------+------+---------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+----------+------+---------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | +--------+----------+----------+------+---------+--------------+
Command route:list
giúp ích trong việc đọc tên route và các middleware đi kèm. Ngay sau đây là tip để đặt tên routes.
Đặt tên các Group Routes
Một quy tắc phổ biến trong Laravel đó là đặt tên route, cho phép bạn dễ dàng tham khảo tên route và tránh phức tạp hóa việc code các URI liên quan đến root trong các template của bạn. Trong một số app thì các URI khó code vẫn chấp nhận được, còn một số trường hợp khác, các route được đặt tên sẽ cho phép những cái như sau:
{{ route('admin.users.show', ['user' => $user]) }} {{-- /admin/users/2 --}}
Khi bạn đang xác định một nhóm route, ví dụ như về admin, bạn cũng có thể gán một tiền tố (prefix) cho tên của route trong nhóm như sau:
Route::namespace('Admin') ->prefix('admin') ->name('admin.') ->group(function () { Route::resource('users', 'UsersController'); });
Tên được gán tiền tố như trên sẽ tạo ra các tên route cho resource controller users
như dưới đây:
- admin.users.index
- admin.users.store
- admin.users.create
- admin.users.show
- admin.users.update
- admin.users.destroy
- admin.users.edit
Tham khảo thêm
Xem đầy đủ tài liệu route và resource controller section. Còn rất nhiều các hướng dẫn thực hiện ứng dụng thực tế dựa trên Laravel tại đây nhé. Hiện tại các việc làm IT lương cao liên quan đến Laravel cũng được các doanh nghiệp tuyển dụng rất nhiều.
TopDev via Laravel News
- M Mới ra trường không kinh nghiệm, sao làm BA?
- C Chuyển đổi SA key sang Workload Identity
- U Use Case Diagram và 5 sai lầm thường gặp
- K Kinh nghiệm xử lý câu lệnh điều kiện trong JavaScript
- D Dart là gì? Ứng dụng của ngôn ngữ lập trình Dart
- C Chuẩn Hóa CV, Nhận Ngay Phím Chất
- S So sánh MySQL và MongoDB: Nên chọn CSDL nào?
- D Dân BA có cần phải rành về kỹ thuật???
- C CSS Selector là gì? Cách sử dụng các loại CSS Selector phổ biến
- P Phân biệt Sketch, Wireframe, Mockup, và Prototype?