Trong Laravel Route là nơi nhận request của người dùng (phương thức GET hoặc POST) sau đó có thể chỉ định (định tuyến) 1 action của 1 Controller thực hiện request đó. Khi tiếp cận Laravel ta không thể bỏ qua Route vì nó là tiền đề cho việc xử lý yêu cầu
Từ phiên bản 5.1 trở về trước: Route được định nghĩa trong app/routes.php.
Từ phiên bản 5.2: Route được định nghĩa trong thư mục routes, phiên bản 5.3 chia ra 2 file web.php và api.php giúp bạn thêm tùy chọn phát triển web và api riêng
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
Nếu bạn muốn sử dụng chung nhiều phương thức Laravel hỗ trợ bạn phương thức match và any
Route::match(['get', 'post'], '/', function () { // xử lý phương thức GET và POST }); Route::any('foo', function () { // xử lý tất cả });
Route::get('user/{id}', function ($id) { return 'User '.$id; // Tham số được biểu diễn trong dấu ngoặc nhọn // Ví dụ lấy id của user và show ra màn hình });
Nếu bạn muốn truyền nhiều tham số:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // Truyền 2 tham số {post} và {comment} });
Nếu bạn muốn tham số truyền vào có hay không đều được, bạn có thể đặt dấu ( ? ) ngay sau tên tham số để đánh dấu nó là tham số không bắt buộc:
Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; });
Bạn có thể dùng Regex để qui định format cho các tham số ở cùng một vị trí trong URL, bằng cách dùng hàm where() để khai báo.
Route::get('user/{name}', function ($name) { // Route có tham số nhận giá trị chuỗi }) ->where('name', '[A-Za-z]+'); Route::get('user/{id}', function ($id) { // Route có tham số nhận giá trị số }) ->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // Route có tham số nhận giá trị chuỗi và số }) ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Route::get('user/profile', function () { // Route có tên là profile })->name('profile');
Bạn cũng có thể đặt tên và chỉ định 1 action trong Controller
Route::get('user/profile', 'UserController@showProfile')->name('profile');
Nếu bạn muốn gom nhiều route vào thành 1 nhóm các thuộc tính chung như middleware hay namespaces, ban có thể sử dụng Route::group
Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // Nhóm các user đã được chứng thực }); Route::get('user/profile', function () { // Nhóm các user đã được chứng thực }); });
Nếu bạn muốn nhóm Route có thêm 1 tiền tố phía trước như admin chẳng hạn bạn có thể viết
Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // Matches The "/admin/users" URL }); });
Tổng Kết
Qua bài này các bạn đã có được kiến thức cơ bản về Route trong laravel 5.x, bài tiếp theo mình sẽ giới thiệu về controller trong Laravel hy vọng các bạn đón xem, nếu có bất kì thắc mắc bạn có thể comment hoặc gửi liên hệ cho mình. Chúc các bạn thành công!