Tập 10: Mã hóa '/' (Encoded forward Slashes) cho tìm kiếm (ok)

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

4. Mã hóa '/' (Encoded forward Slashes)

Giả sử mình khai báo một route để tìm kiếm như sau:

Route::get('search/{search}', function ($search) {
    return $search;
});

Một bài viết có tiêu đề là "About controller/closure object", giờ mình muốn tìm kiếm bài viết này thông qua route trên thì phải vào đường dẫn http://localhost:8000/search/About controller/closure object nhưng lại báo lỗi 404, một kết quả mình không mong muốn chút nào.

Lý do xảy ra lỗi trên chính là vì giá trị tham số search có chứa ký tự /, làm cho framework hiểu là ta đang truy cập và một cấp con trong URI, chứ không là là giá trị bình thường của tham số search. Laravel đã khắc phục lỗi này bằng cách ràng buộc tham số chứa / với pattern là .*. Bây giờ bạn chỉ cần sửa đoạn code trên như sau:

Route::get('search/{search}', function ($search) {
    return $search;
})->where('search', '.*');

Đây chính là kết quả mà mình mong muốn:

Chú ý: Thông thường trường hợp này dùng để làm chức năng tìm kiếm, khuyến cáo nên để route này cuối cùng để tránh trường hợp trùng URI với các route khác.

Last updated