Get in touch
or send us a question?
CONTACT

[Laravel Tutorials] – Bài 4: Route trong Laravel (phần 1)

Hệ thống website là một bản đồ thiết lập định tuyến một đường dẫn mạng đến một đoạn mã xử lý (xử lý giao dịch, tạo giao diện). Trong framework Laravel việc thiết lập này hết sức đơn giản.

Các loại Route trong Laravel

Cấu trúc của một Route

Route::METHOD('URL', ACTION);

Trong đó METHOD gồm:

  • Route::get($uri, $callback): nhận resquest với phương thức GET
  • Route::post($uri, $callback): nhận resquest với phương thức POST
  • Route::put($uri, $callback): nhận resquest với phương thức PUT
  • Route::patch($uri, $callback): nhận request với phương thức PATCH
  • Route::delete($uri, $callback): nhận resquest với phương thức DELETE
  • Route::options($uri, $callback): nhận request với phương thức OPTIONS
  • Route::match([‘METHOD1’, ‘METHOD2’, …], $uri, $callback): nhận request với nhiều phương phức kết hợp như POST,GET,PUT,..
  • Route::any($uri, $callback): nhận request với tất cả các phương thức
  • Route::group nhóm route
  • Route::resource sử dụng với resource controller

Sử dụng Route trong Laravel

Các thư mục chưa route

  • routes/web.php: định nghĩa các route cho giao diện web của bạn.
  • routes/api.php: định nghĩa các route api cho các app hoặc web app.

Route cơ bản

Khai báo route greeting sẽ trả về chuỗi “Hello World” khi truy cập vào path /greeting.

use Illuminate\Support\Facades\Route;

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

Sử dụng route với controller

Route::routeMethod($uri, [$controllerName, $method]);

Tạo file app/Http/Controllers/GreetingController.php tạo một controller với function greeting()

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class GreetingController extends Controller
{
    public function greeting()
    {
        return "Xin chào";
    }
}

Trong file routes/web.php tạo route sử dụng controller GreetingController

<?php

use Illuminate\Support\Facades\Route;

Route::get('greeting', [\App\Http\Controllers\GreetingController::class, 'greet']);

Truyền tham số trong route

Trong Laravel để route có thể nhận tham số (parameter) thì bạn chỉ cần thêm cú pháp {parameter} vào trong $uri. ví dụ:

Route::get('/user/{id}', function ($id) {
    return 'User '.$id;
});

Có thể truyền nhiều tham số vào route. Ví dụ:

Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

Các tùy chọn của parameters

Đôi khi có thể chỉ định một parameter là không bắt buộc, bạn chỉ cần thêm dấu ? vào sau tên parameter

Route::get('/user/{name?}', function ($name = null) {
    return $name;
});

Route::get('/user/{name?}', function ($name = 'John') {
    return $name;
});

Các ràng buộc parameters

Bạn muốn định dạng kiểu dữ liệu của parameter bạn có thể sử dụng phương thức where. Ví dụ:

Route::get('/user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('/user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

Một số biểu thức hỗ trợ giúp rút gọn định dạng kiểu dữ liệu parameter

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->whereNumber('id')->whereAlpha('name');

Route::get('/user/{name}', function ($name) {
    //
})->whereAlphaNumeric('name');

Route::get('/user/{id}', function ($id) {
    //
})->whereUuid('id');

Nếu request đến không phù hợp với các ràng buộc của route, một phản hồi HTTP 404 sẽ được trả về.

Đặt tên cho route

Đặt tên cho route giúp thuận tiện trong việc tạo các URL hoặc các chuyển hướng. Để gán tên cho route thì bạn chỉ cần sử dụng phương thức name với cú pháp như sau:

Route::get('/user/profile', function () {
    //
})->name('profile');

Cách sử dung route name

Để tạo ra URL qua route name thì bạn sử dụng phương thức route() với cú pháp sau:

route($name, ['prameter_name1' => 'prameter1', 'prameter_name2' => 'prameter2', ...]);

Ví dụ:

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');

// Route define parameter
Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

Lời kết

Ở bài này chúng ta đã tìm hiểu một số khái niệm trong route. Phần sau mình sẽ giới thiệu tiếp các tính năng khác nữa của Route trong Laravel.