Route laravel – Cách đặt tên và nhóm route (Route Group)

Chào các bạn, hôm nay mình tiếp tục chuỗi bài viết về Laravel và mong muốn mang đến cho các bạn những điều thú vị, đặc biệt là phần Route trong Laravel. Nếu như bạn đã từng làm việc với PHP thuần, có lẽ bạn không còn xa lạ gì với việc sử dụng file htaccess để cấu hình máy chủ Apache và điều hướng yêu cầu từ client đến các page của trang web. Tuy nhiên, khi sử dụng Laravel, phần này sẽ được quản lý hoàn toàn bởi Route.

1. Đặt tên Route (Set name for route)

Trong Laravel, chúng ta có thể đặt tên cho từng Route để dễ dàng sử dụng trong ứng dụng. Điều này giúp tránh việc nhớ các URI dài và phức tạp.

Cách đặt tên cho Route

Hoclaravel.vn gợi ý sử dụng phương thức name() để đặt tên cho Route:

Route::get('home', function () {
    return view('home');
})->name('home');

Sau đó, bạn có thể lấy URL của Route bằng cách sử dụng hàm route():

$url = route('home');

Hoặc chuyển hướng đến Route đó:

return redirect()->route('home');

Đặt tên Route với tham số

Nếu Route có tham số, bạn có thể truyền giá trị bằng cách sau:

Route::get('profile/{id}', function ($id) {
    return "Profile ID: " . $id;
})->name('profile');

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

Ứng dụng thực tế khi đặt tên Route

  • Hệ thống API: Khi xây dựng API, đặt tên Route giúp dễ dàng quản lý và gọi API từ phía frontend. Ví dụ:
Route::get('users', 'UserController@index')->name('api.users.index');
Route::post('users', 'UserController@store')->name('api.users.store');
  • Ứng dụng quản trị: Khi phát triển một hệ thống quản trị, đặt tên Route giúp dễ dàng kiểm soát và phân quyền.
Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('dashboard', 'AdminController@index')->name('admin.dashboard');
    Route::get('users', 'UserController@index')->name('admin.users');
});

2. Nhóm Route (Route group)

Trong Laravel, bạn có thể nhóm các Route lại với nhau để chia sẻ các thuộc tính chung như middleware, namespace, prefix, hay sub-domain.

READ  Hướng Dẫn Truy Vấn Bằng Laravel Query Builder

Middleware Route

Bạn có thể áp dụng nhiều middleware cho một nhóm Route bằng cách sử dụng phương thức middleware():

Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    });
    Route::get('/settings', function () {
        return view('settings');
    });
});

Tất cả các Route trong nhóm này sẽ được bảo vệ bởi middleware authverified.

Namespace Route

Namespace giúp bạn định danh các controller thuộc về một nhóm cụ thể:

Route::namespace('Admin')->group(function () {
    Route::get('dashboard', 'DashboardController@index');
    Route::get('users', 'UserController@index');
});

Điều này giúp Laravel tự động hiểu các Controller thuộc về App\Http\Controllers\Admin mà không cần khai báo đầy đủ namespace.

Sub-domain Route

Bạn có thể nhóm các Route theo sub-domain bằng phương thức domain():

Route::domain('{account}.example.com')->group(function () {
    Route::get('profile/{id}', function ($account, $id) {
        return "Account: $account, Profile ID: $id";
    });
});

Ở đây, {account} sẽ tự động được nhận diện là một phần của sub-domain.

Tiền tố URI (Route prefix)

Giả sử bạn có một hệ thống quản trị với nhiều Route có tiền tố admin, bạn có thể sử dụng phương thức prefix():

Route::prefix('admin')->group(function () {
    Route::get('dashboard', function () {
        return view('admin.dashboard');
    });
    Route::get('users', function () {
        return view('admin.users');
    });
});

Các Route này sẽ có URI lần lượt là /admin/dashboard/admin/users.

Tiền tố tên Route (Route named prefix)

Tương tự như prefix URI, bạn có thể đặt tiền tố tên Route bằng phương thức name():

Route::name('admin.')->group(function () {
    Route::get('dashboard', function () {
        return view('admin.dashboard');
    })->name('dashboard');
    Route::get('users', function () {
        return view('admin.users');
    })->name('users');
});

Khi gọi route('admin.dashboard'), Laravel sẽ tự động tạo đường dẫn tương ứng.

Kết hợp nhiều thuộc tính trong Route Group

Nếu một nhóm Route có chung nhiều thuộc tính, bạn có thể gom lại bằng Route::group():

Route::group([
    'namespace' => 'Admin',
    'prefix' => 'admin',
    'as' => 'admin.',
    'middleware' => ['auth']
], function () {
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    Route::get('users', 'UserController@index')->name('users');
});

Các Route trong nhóm này:

  • Có namespace Admin
  • Có prefix URI là /admin
  • Có tiền tố tên là admin. (vd: admin.dashboard)
  • Được bảo vệ bởi middleware auth

Ứng dụng thực tế khi nhóm Route

  • Hệ thống API: Khi làm việc với API, nhóm Route giúp tổ chức rõ ràng hơn.
Route::prefix('api')->group(function () {
    Route::get('users', 'Api\UserController@index');
    Route::post('users', 'Api\UserController@store');
});
  • Ứng dụng quản trị: Nhóm Route giúp tách biệt phần quản trị với giao diện người dùng.
Route::middleware(['auth', 'admin'])->prefix('admin')->group(function () {
    Route::get('dashboard', 'AdminController@index')->name('admin.dashboard');
    Route::get('users', 'UserController@index')->name('admin.users');
});

Lời kết

Trong bài viết này, chúng ta đã tìm hiểu cách đặt tên Route và nhóm các Route trong Laravel. Việc đặt tên giúp quản lý Route dễ dàng hơn, trong khi nhóm Route giúp tổ chức code gọn gàng và tối ưu hơn. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại bình luận nhé!

READ  Cách Hoạt Động Session Trong Laravel, Cấu Hình & Ứng Dụng Thực Tế

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *