Laravel – Routing

Routing Cơ bản

Routing có nghĩa là định tuyến một request đến bộ xử lý thích hợp. Những routes có thể được định nghĩa trong file routes/web.php. Cấu trúc cơ bản của routes như sau:

Route::get('/', function () {
return 'Hello World';
});

Route::post('foo/bar', function () {
return 'Hello World';
});

Route::put('foo/bar', function () {
//
});

Route::delete('foo/bar', function () {
//
});

Ví dụ

Chúng ta sẽ tìm hiểu cách định tuyến trang chủ của laravel.

routes/web.php

<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

resources\views\welcome.blade.php

<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Laravel</title>

<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">

<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Raleway', sans-serif;
font-weight: 100;
height: 100vh;
margin: 0;
}

.full-height {
height: 100vh;
}

.flex-center {
align-items: center;
display: flex;
justify-content: center;
}

.position-ref {
position: relative;
}

.top-right {
position: absolute;
right: 10px;
top: 18px;
}

.content {
text-align: center;
}

.title {
font-size: 84px;
}

.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 12px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}

.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
<a href="{{ route('register') }}">Register</a>
@endauth
</div>
@endif

<div class="content">
<div class="title m-b-md">
Laravel
</div>

<div class="links">
<a href="https://laravel.com/docs">Documentation</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
</html>

Cơ chế của routing trang chủ được mô tả như hình bên dưới

Step 1 : Truy cập vào url của trang chủ.

Step 2 : Truy vấn này phù phợp với phương thức được khai báo trong file routes/web.php tứ là phương thức get và url là (/). Như vậy function được thực thi.

Step 3 : function này gọi đến template (resources/views/welcome.blade.php) qua hàm view với tham số ‘welcome‘. và trả về html như hình bên dưới.

Tham số của Routing

Trong ứng dụng, bạn cần lấy tham số từ url, ví dụ như id của user, id bài viết… Lúc này bạn cần sử dụng tham số cho Route. Có 2 lại tham số là bắt buộc và tùy chọn.

Tham số bắt buộc

Tham số bắt buộc phải có trong url, ví dụ bạn cần lấy ID để thực hiện 1 điều gì đó.

Ví dụ như thêm đoạn code sau vào file routes/web.php

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

Lúc này vào url http://localhost:8000/ID/5 tham số truyền vào là 5 sẽ được lưu trong $id và sử dụng trong function.

Tham số tùy chọn

Là tham số có thể có hay không trong url. Cách khai báo chúng ta thêm dấu “?” vào tham số như ví dụ bên dưới. Vì là tham số tùy chọn nên bạn cần có 1 giá trị mặc định cho $name.

Route::get('/user/{name?}',function($name = 'Virat'){
echo "Name: ".$name;
});

Ví dụ

routes/web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

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

Route::get('/user/{name?}',function($name = 'Gandhi'){
echo "Name: ".$name;
});

Step 1 : Ở file routes/web.php chúng ta định nghĩa cho 3 routes khác nhau cùng phương thức get.

Vào url http://127.0.0.1:8000/ để xem kết quả từ route đầu tiên.

Step 2 : Để thực thi route thứ 2 bạn vào http://localhost:8000/ID/<tham số> chẳng hạn http://localhost:8000/ID/10 kết quả trả về như hình

Step 3 : Để thực thi route thứ 3 bạn vào http://localhost:8000/user/Virat hoặc http://localhost:8000/user/ để xem kết quả