Tập 10: Giải thích về public function boot() (ok)

https://viblo.asia/p/tap-10-routing-laravel-Qpmlew4oKrd

3. Regular expression constraint

Chắc hẳn khi học PHP các bạn đã quá quen thuộc với thuật ngữ này rồi. Khi áp dụng với route thì Laravel sẽ ràng buộc các tham số theo những pattern mà chúng ta khai báo với cú pháp rất ngắn gọn, dễ hiểu bằng method where.

Chẳng hạn đối với tham số name, chúng ta quy định nó chỉ được chứa các ký tự alphabet. Để khai báo route có thể làm việc đó, bạn tham khảo đoạn code sau:

Route::get('user/{name}', function($name) {
    //
})->where('name', '[A-Za-z]+');

Ta có thể thấy tham số thứ nhất mà where sẽ nhận là tên tham số cần ràng buộc, tham số thứ hai sẽ là chuỗi pattern do ta định nghĩa. Nếu tham số không phù hợp với ràng buộc sẽ trả về lỗi 404.

Bạn cũng có thể ràng buộc nhiều tham số khác nhau trong cùng một route, chẳng hạn:

Route::get('user/{name}/post/{id}', function($name, $id) {
    //
})->where(['name' => '[A-Za-z]+', 'id' => '[0-9]+']);

Lúc này where sẽ nhận một mảng chứa các ràng buộc cho từng tham số.

Thử nghĩ trong một ứng dụng có rất nhiều tham số id, chẳng lẽ phải ràng buộc ở từng route sao, rồi sau này có thay đổi gì cũng phải chỉnh từng route một chăng? Chính vì vấn đề đó, Laravel cung cấp cho chúng ta một giải pháp để có thể giải quyết nó, gọi là "Global constraints".

Việc global constraint này sẽ được thực hiện tại file app/Providers/RouteServiceProvider.php, cụ thể là method boot.

public function boot()
{
    Route::pattern('id', '[0-9]+');
    // Route::pattern('name', '[A-Za-z]+');
    //
    
    parent::boot();
}

Lúc này, mọi tham số id trong routing chỉ nhận được là số.

Last updated