Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 3: Route trong Laravel 8

Tiếp tục với series, phần này mình sẽ giới thiệu với mọi người về route trong Laravel.

1. Routing là gì?

Routing trong Larvel cũng như các framework khác, đều có chức năng là định tuyến ra các action cho các sự kiện tương ứng. Ví dụ như khi truy cập vào path welcome thì sẽ xử lí hành động nào, action nào hoặc là khi run command abc sẽ thực thi hành động xyz.

Trong Laravel hỗ trợ chúng ta 3 loại route chính đó là:

  • Route dành cho web.
  • Route dành cho cli (commnad).
  • Route dành cho broadcast.

Có vẻ hơi khó hiểu đúng không? Mình sẽ giới thiệu và ví dụ từng phần cho các bạn dễ hiểu.

2. Sử dụng route cho web.

Mặc định để khai báo các route dành cho web thì các bạn khai báo trong hai file routes/web.php hoặc routes/api.php. Trong đó, nếu bạn khai báo route trong routes/api.php thì các path sẽ được thêm tiền tố api ở phía trước.

Ngoài ra nếu như các bạn muốn khai báo route trong file khác thì bạn cần khai báo file đó app/Providers/RouteServiceProvider.php.

Route trong Laravel hỗ trợ chúng ta định nghĩa cho tất cả các HTTP request method như:

  • 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 resquest 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 resquest với phương thức OPTIONS.

 Hoặc nếu như bạn muốn đăng kí một route hỗ trợ nhiều method thì bạn có thể dụng phương thức match theo cú pháp:

Route::match($methods, $uri, $callback)

Hoặc là nhận tất cả các HTTP method với phương thức any:

Route::any($uri, $callback) 

Trong các cú pháp trên:

- $uri là path mà bạn muốn route xử lí.
- $callback là một callback, callable hoặc một array chứa thông tin controller và phương thức tác động đến.
- $methods là một array chứa các phương thức mà bạn muốn route này xử lí.

VD: Khai báo route welcome sẽ trả về chuỗi "Xin chào" khi truy cập vào path /welcome.

<?php

// file routes/web.php

use Illuminate\Support\Facades\Route;

Route::get('welcome', function () {
    return "Xin chào";
});

Và đây là kết quả:

router trong laravel

VD: Khai báo route api/greeting cũng sẽ trả về chuỗi "Xin chào". Nhưng sẽ đặt trong file routes/api.php.

<?php

// file routes/api.php

use Illuminate\Support\Facades\Route;

Route::get('greeting', function () {
    return "Xin chào";
});

Trong ví dụ trên vì mình đặt trong file routes/api.php nên path sẽ tự động thêm api vào trước chính vì thế mình không cần điền api vào nữa.

Nếu như bạn muốn đưa logic vào trong controller thì bạn có thể sửa dụng cú pháp sau:

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

Trong đó:

  • routeMethod là method action của route.
  • $uri là path mà bạn muốn xử lí.
  • $controllerName là controller chứa logic.
  • $method là phương thức trong controller chứa logic để xử lí cho route đó.

VD: Mình sẽ di chuyển logic code của ví dụ trên vào GreetingController.

- file app/Http/Controllers/GreetingController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

- file routes/web.php

<?php

use Illuminate\Support\Facades\Route;

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

Phần controller mình sẽ nói chi tiết sau.

Ngoài ra Laravel cũng hỗ trợ thêm các loại route khác như:

Route redirect

Route::redirect($uri, $redirectTo, $status)

Trong đó: 

  • $uri là path mà bạn muốn xử lí.
  • $redirectTo là path mà bạn muốn redirect đến.
  • $status là http status mà các bạn muốn thiết lập, mặc định $status là 302

Route view 

Route::view($uri, $viewName, $data)

Trong đó:

  • $uri là path mà bạn muốn xử lí.
  • $viewName là view mà bạn muốn render.
  • $data data mà bạn muốn truyền vào view. 
  • Bạn còn có thể truyền thêm 2 tham số khác vào đó là http status và header.

Chú ý: Route view chỉ work với HTTP request GET hoặc HEAD.

Ngoài ra bạn cũng có thể group các route lại để tiện xử lí qua phương thức group.

VD:

use Illuminate\Support\Facades\Route;

Route::prefix('greeting')->group(function () {

	// work for: /greeting/vn
    Route::get('vn', function () {
        return "Xin chào!";
    });

    // work for: /greeting/en
    Route::get('en', function () {
        return "Hello!";
    });

    // work for: /greeting/cn
    Route::get('cn', function () {
        return "你好!";
    });
});

Trong ví dụ trên mình đã group các route có cùng tiền tố greeting rồi lại khai báo các route bên trong đó.

3. Lời kết.

Laravel hỗ trợ route rất đa dạng nên phần này chúng ta tạm tìm hiểu đến đây thôi. Phần tiếp theo mình sẽ giới thiệu tiếp các khái niệm liên quan đến route trong Laravel 8.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

8 Comments

bạn ơi mình làm ví dụ theo bạn mà bị lỗi ạ

Tuân

3 năm trước

Chào Tuân,

Bạn làm theo ví dụ nào ạ? Và lỗi là gì?

Vũ Thanh Tài

3 năm trước


Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in D:\xampp\htdocs\PROJECT\myproject\laravel8\routes\web.php:16 Stack trace: #0 {main} thrown in

Tuân

3 năm trước


Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in D:\xampp\htdocs\PROJECT\myproject\laravel8\routes\web.php:16 Stack trace: #0 {main} thrown in

Tuân

3 năm trước

Hay quá anh, thật sự cảm kích những người làm ra các bài hướng dẫn như anh.

Jason

3 năm trước

ủa bạn không bị lỗi như bạn ở trên hả

Sướng

3 năm trước

Cảm ơn bạn nhé, thấy bạn viết thiết tha quá nên tắt Adblock đẻ đọc đây.

Thích

3 năm trước

Chào bạn
mình đang thắc mắc là sao Laravel

abc

2 năm trước

Bình luận

Captcha