Tìm hiểu về Route trong Laravel (ok)
https://viblo.asia/p/tim-hieu-ve-route-trong-laravel-V3m5W1pwZO7
Last updated
https://viblo.asia/p/tim-hieu-ve-route-trong-laravel-V3m5W1pwZO7
Last updated
Xin chào anh em, tiếp tục series Laravel và những điều thú vị về nó thì hôm nay mình muốn giới thiệu đến anh những kiến thức liên quan đến Route. Nếu như khi mình làm một project bằng PHP thuần thì chúng ta sẽ sử file htaccess dùng để cấu hình máy chủ apache , tức là khi người dùng đánh đường dẫn trên browser thì đường dẫn đó sẽ map trong file htaccess để điều hướng đến các page của trang web. Nhưng trong Laravel thì Route
sẽ thực hiện điều đó.
Thì để viết Route trong Laravel thì chúng ta sẽ viết trong routes/web.php - định nghĩa các route cho web, còn routes/api.php để định nghĩa route cho api.
Bây giờ chúng ta thử mở file routes/web.php lên để viết thử 1 Route xem nó chạy thử như nào nhé.
Thì mặc định route sẽ hỗ trợ các phương thức như sau:
Trong đó $url: đường dẫn route và $callback : là một hành động nào đó sẽ được thực hiện để trả về.
Nhiều khi chúng ta sẽ cần truyền tham số trên đường dẫn, chúng ta cũng có thể truyền trong route. Ví dụ,chúng ta cần lấy ID của user từ URL, chúng ta có thể viết route như sau:
Ngoài ra chúng ta cũng có thể truyền nhiều tham số trong URL
Tên routes cho phép chúng ta thuận tiện hơn khi chuyển hướng các route cụ thể. Chúng ta có thể đặt tên route bằng cách thêm name
khi chúng ta định nghĩa route.
Hoặc ngoài ra chúng ta cũng có thể chỉ định tên route cho controller.
Khi chúng ta đã đặt tên route trong phần định nghĩa route ở trên, chúng ta cũng có thể lấy đường dẫn bằng helper route()
. Ví dụ: $url = route('posts.store')
. Hoặc chúng ta cũng có thể chuyển hướng trang bằng cách sử dụng hàm route()
: return redirect()->route('posts.list')
.
Khi route được đặt tên và có tham số trên đường dẫn thì chúng ta sẽ sẽ truyền tham số vào trong hàm helper route()
như sau. Ví dụ chúng ta có route sau :
$url = route('users.detail', ['id' => 10]);
Nhiều khi những route có chung hành vi thì chúng ta sẽ nhóm route vào.
Ở trên chúng ta thấy xuất hiện namespace
, đừng bối rối vì mình sẽ giới thiệu cho các bạn ngay ở dưới đây.
Namespace trong Laravel giông như PHP namespace được chỉ định với một nhóm controller.
Chúng ta zét ví dụ sau
Các bạn có thấy đặc điểm chung của các route trên không, nó đều bắt đầu bằng admin vì thể để viết gọn lại các URL thì chúng ta sẽ sử dụng prefix
để URL khi định nghĩa route ngắn gọn dễ nhìn hơn.
Qua các ví dụ trên chắc hẳn bạn cũng hiểu được phần nào về các thành phần cơ bản của route. Chúng ta cùng xét ví dụ nhé
Trong Laravel thì nó sẽ có hỗ trợ tự động giải quyết gợi ý Eloquent models được xác định bên trong route hoặc controller có tên biến phù hợp với tên segment.
Giải thích tí chỗ này nhé: Trong ví dụ trên, Eloquent đã gợi ý biến $post định nghĩa trong route phù hợp với {post} segment trong URL, Laravel tự động đẩy các model Post có ID phù hợp với giá trị tương ứng từ URL. Nếu không tìm thấy trong CSDL của bạn thì nó sẽ trả về lỗi 404 HTTP.
Để đăng ký một explicit binding, sử dụng phương thức model để xác định class cho một than số. Các bạn nên định nghĩa explicit bindings bên trong phương thức boot
của RouteSerrviceProvider
class
Trong file web.php định nghĩa một route
Khi chúng ta rằng buộc tham số {post} trong model App\Post, một instance của Post sẽ được inject vào route. Vì vậy ví dụ như một request đến admin/1 sẽ được hiểu như là lấy ra bài post có id = 1. Nếu instance model không tìm thấy trong CSDL, một response 404 HTTP sẽ tự động được sinh ra.
Nếu mà chúng ta tạo bảng mà có khóa chính khác với id
. Ví dụ thường thường các bạn sẽ đặt khóa chính trong table là id
nhưng bây giờ mình không muốn đặt là id
nữa thì sẽ thay đổi như sau. Viết vào trong Eloquent model
Nếu như bạn không dùng Laravel Collective
mà các bạn dùng thuần HTML Form thì khi chúng ta định nghĩa một số method PUT, PATCH, DELETE
thì sẽ không được hỗ trợ để map method với route nào. Vì vậy khi định nghĩa PUT, PATCH, DELETE
routes mà được gọi từ HTML Form thì chúng ta sẽ cần thêm trường input hidden
vào form. Giá trị của trường hidden là method sẽ sử dụng phương thức HTTP request nào. Ví dụ
Vừa rồi thì mình cùng với các bạn tìm hiểu những cái cơ bản nhất về route, nó có thể giúp các bạn mường tượng cách sử dụng route như thế nào. Mình xin kết thúc bài viết ở đây, mọi thắc mắc gì hãy comment phía dưới bài viết cho mình nhé !!
Bây giờ chúng ta gõ đường link localhost:8000/test-route
nhé