Laravel cơ bản
Laravel nâng cao
Quảng cáo

Route trong Laravel

Trong hướng dẫn này các bạn sẽ học cách sử dụng Route trong Laravel

Route là gì?

Route trong Laravel có nhiệm vụ nhận yêu cầu của người dùng và chuyển yêu cầu đó đến nơi xử lý sau đó trả về kết quả. Ví dụ khi bạn truy cập một bài viết trên VZN.vn với đường dẫn https://vzn.vn/mau-code-dang-nhap-bang-php-voi-ket-noi-pdo/ thì Route sẽ chuyển đến nơi xử lý code hiển thị nội dung bài viết. Route trong Laravel có thể bao gồm 1 phương thức hoặc nhiều phương thức xử lý vấn đề(GET, POST, MATCH ...) và Trong Laravel có 3 loại Route chính như sau:

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

Sau đây chúng ta đi nghiên cứu từng loại Route với ví dụ cụ thể để các bạn dễ hình dung để có cái nhìn tổng quan về chúng

Route dành cho web

Để khai báo route dành cho web thì các bạn có thể chọn 1 trong 2 cách:

Mặc định 

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

Tùy chỉnh

Nếu các bạn không muốn khai báo theo mặc định mà muốn khai báo trong file tùy chỉnh theo ý mình thì các bạn cần phải Khai báo file đó trong app/Providers/RouteServiceProvider.php.
Ví dụ về khai báo như này

Ví dụ

<?php

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/home';

    /**
     * The controller namespace for the application.
     *
     * When present, controller route declarations will automatically be prefixed with this namespace.
     *
     * @var string|null
     */
    // protected $namespace = 'App\\Http\\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
                
            Route::middleware('vzn')
                ->namespace($this->namespace)
                ->group(base_path('routes/vzn.php'));
        });
    }

    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
        });
    }
}

Route trong Laravel hỗ trợ chúng ta định nghĩa cho tất cả các phương thức yêu cầu 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.
  • Route::match($methods, $uri, $callback) kết hợp hiều phương phức
  • Route::any($uri, $callback)  nhận tất cả các phương thức
  • Route::redirect($uri, $redirectTo, $status)
  • Route::view($uri, $viewName, $data) - Route view chỉ work với HTTP request GET hoặc HEAD.
  • Route::filter tạo ra bộ lọc nhằm mục đích nào đó, ví dụ tạo bộ lọc kiểm tra đã đăng nhập hay chưa
  • Route::group gom các route lại với nhau thành một nhóm
  • Route::controller gọi đến controller tương ứng
  • Route::resource sử dụng với resource controller

- $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í.

- $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

- $viewName là view mà bạn muốn render.

- $data data mà bạn muốn truyền vào view. 

VD: Khai báo route chao-mung sẽ trả về chuỗi "Chào mừng bạn đến với VZN.vn" khi truy cập vào đường dẫn domain.com/chao-mung/.

Ví dụ

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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('chao-mung/', function () {
   return 'Chào mừng bạn đến với VZN.vn';
});

Kết quả:

Hướng dẫn Laravel

VD: Khai báo route api/welcome cũng sẽ trả về chuỗi "Chào mừng bạn đến với VZN.vn". Nhưng sẽ đặt trong file routes/api.php.

Ví dụ

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Route::get('welcome/', function () {
   return 'Chào mừng bạn đến với VZN.vn';
});

Vì Route đặt trong file api nên nó sẽ tự động sinh ra đường dẫn api/welcome do đó chúng ta sẽ không cần thêm tiền tố api vào trước path nữa.

Kết quả:

Học Laravel

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

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

Trong đó:

routeMethod là phương thức xử lý của Route (method action).
$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: Chúng ta sẽ thực hiện viết logic code của ví dụ trên vào WelcomeController.

Tạo file app/Http/Controllers/WelcomeController.php với nội dung:

Ví dụ

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class WelcomeController extends Controller
{
    public function welcome()
    {
        return "Chào mừng bạn đến với VZN.vn";
    }
}

Chỉnh sửa routes/web.php

Ví dụ

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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('chao-mung/', [\App\Http\Controllers\WelcomeController::class, 'welcome']);

Kết quả tương tự như trên khi bạn truy cập vào domain.com/chao-mung/

Ngoài ra trong khi thiết kế website các bạn sẽ thường thấy có những route có chung tiền tố thì các bạn có thể dùng phương thức group để xử lý các route đó, như ví dụ dưới đây:

Ví dụ

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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::prefix('about')->group(function () {

   // đường dẫn: /about/lien-he
    Route::get('lien-he', function () {
        return "Liên hệ với chúng tôi";
    });

    // đường dẫn: /about/gioi-thieu
    Route::get('gioi-thieu', function () {
        return "Giới thiệu về chúng tôi";
    });

});

Bài viết này đã giúp ích cho bạn?

Advertisements