Định tuyến (Routing) trong Laravel

Trong Laravel, tất cả các yêu cầu (request) được ánh xạ với sự trợ giúp của các routes. Định tuyến cơ bản định tuyến yêu cầu đến các controller liên quan. Bài này thảo luận về định tuyến trong Laravel.

Định tuyến trong Laravel bao gồm các loại sau:
  • Định tuyến cơ bản
  • Định tuyến các tham số
  • Các định tuyến đặt tên


Định tuyến cơ bản

Tất cả các định tuyến ứng dụng được đăng ký trong tệp routes/web.php. Tệp này thông báo cho Laravel về các URI mà nó sẽ phản hồi và controller được liên kết sẽ cung cấp cho nó một lời gọi cụ thể. Định tuyến mẫu cho trang welcome có thể được hiển thị trong ảnh chụp màn hình được cung cấp bên dưới:

định tuyến rong laravel

Route::get('/', function() {
return view('welcome');
});

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Routing.

routes/web.php

Route::get('/', function () {

return view('welcome');

}); 

resources/view/welcome.blade.php

<!DOCTYPE html>

       <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Laravel</title>

<!-- Fonts -->

<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

<!-- Styles -->

<style>

     html, body {

       background-color: #fff;

       color: #636b6f;

       font-family: 'Nunito', sans-serif;

       font-weight: 200;

       height: 100vh;

       margin: 0;

       }

     .full-height {

       height: 100vh;

       }

     .flex-center {

       align-items: center;

       display: flex;

       justify-content: center;

       }

     .content {

       text-align: center;

       }

     .title {

       font-size: 84px;

       }

     .m-b-md {

       margin-bottom: 30px;

       }

   </style>

 </head>

 <body>

   <div class="flex-center position-ref full-height">

     <div class="content">

       <div class="title m-b-md">

            Laravel

       </div>

     </div>

   </div>

 </body>

</html> 


Cơ chế Routing hiển thị như ảnh dưới đây
định tuyến trong laravel

Bây giờ chúng ta cúng tìm hiểu các bước liên quan đến cơ chế định tuyến một cách chi tiết:

Bước 1 - Đầu tiên, chúng ta nên thực thi URL gốc của ứng dụng.
Bước 2 - Bây giờ, URL được thực thi phải khớp với phương thức thích hợp trong tệp web.php. Trong trường hợp hiện tại, nó phải phù hợp với phương thức và URL gốc (’/'). Điều này sẽ thực hiện các chức năng liên quan.
Bước 3 - Hàm gọi file template resources/views/welcome.blade.php. Tiếp theo, hàm gọi hàm view() với đối số ‘welcome', không sử dụng blade.php.

Nó sẽ tạo ra đầu ra HTML như trong hình bên dưới:
định tuyến trong laravel


Định tuyến các tham số

Đôi khi trong ứng dụng web, bạn có thể cần phải lấy các tham số được truyền bằng URL. Đối với điều này, bạn nên sửa đổi mã trong tập tin web.php.

Bạn có thể nắm bắt các tham số trong tệp web.php theo hai cách như được thảo luận ở đây:

Các tham số bắt buộc

Các tham số này là những tham số cần được bắt buộc để định tuyến ứng dụng web. Ví dụ: để lấy số nhận dạng (ID) người dùng từ URL có thể được thực hiện bằng cách xác định các tham số định tuyến như dưới đây:

Route::get('ID/{id}',function($id) {

         echo 'ID: '.$id;

 }); 

Các tham số tùy chọn

Đôi khi các nhà phát triển có thể tạo ra các tham số là tùy chọn và có thể bao gồm dấu ? sau tên tham số trong URL. Điều quan trọng là giữ giá trị mặc định được đề cập dưới dạng tên tham số. Quan sát ví dụ sau đây cho thấy cách xác định tham số tùy chọn:

Route::get('user/{name?}', function ($name = 'LearnSkill') { return $name;});
Ví dụ trên kiểm tra xem giá trị có khớp với LearnSkill hay không và định tuyến đến URL được xác định.

Các định tuyến đặt tên

Các định tuyến đặt tên cho phép một cách thuận tiện để tạo các routes. Chuỗi các định tuyến có thể được chỉ định bằng cách sử dụng phương thức name vào định nghĩa routes. Đoạn mã sau đây cho thấy một ví dụ để tạo các routes được đặt tên bằng controller.

Route::get('user/profile', 'UserController@showProfile')->name('profile');

UserController sẽ gọi hàm showProfile với tham số là profile. Các tham số sử dụng phương thức name vào định nghĩa routes.