Tập 10: V. Nhóm route (Route group) (ok)

https://viblo.asia/p/tap-10-routing-laravel-Qpmlew4oKrd

V. Nhóm route (Route group)

Các route nằm trong cùng một nhóm sẽ được chia sẻ các thuộc tính route như namespace, middleware, tiền tố tên, tiền tố URI,...

1. Middleware route

Để gán middleware cho các route chung một nhóm, bạn có thể sử dụng phương thức middleware để lồng các route con.

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second Middleware
    });

    Route::get('user/profile', function () {
        // Uses first & second Middleware
    });
});

2. Namespace route

Với method namespace bạn sẽ khai báo namespace cho tất cả các route con nằm trong nó, chẳng hạn:

Route::namespace('Admin')->group(function () {
    // Controllers Within The "App\Http\Controllers\Admin" Namespace
});

(Mọi controller được gọi trong nhóm này sẽ được thêm namespace App\Http\Controllers\Admin)

Mặc định RouteServiceProvider đã kết nối các file route trong một group, cho phép bạn đăng ký các controller mà không cần đến đầy đủ namespace App\Http\Controllers. Vì vậy để khai báo một controller, bạn chỉ cần khai báo namespace do bạn phân cấp cùng với tên của controller.

3. Sub-domain route

Laravel còn cung cấp cho chúng ta nhóm sub-domain. Nhóm này có thể chỉ định tham số như một URI, cho phép ta có thể giữ một phần sub-domain để sử dụng trong các route con.

Để khai báo nhóm sub-domain, bạn sử dụng method domain như sau:

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

Tham số {account} đóng vai trò như một thành phần của từng URI route con, nên thứ tự phải được đứng trước vì toàn bộ URI sẽ là {account}.myapp.com/user/{id}.

Lưu ý: Để đảm bảo các route sub-domain có thể hoạt động, bạn nên khai báo các route này trước các route domain gốc, điều này sẽ ngăn không cho domain gốc ghi đè lên các sub-domain có cùng URI.

4. Tiền tố URI route (Route prefix)

Giả sử ứng dụng của bạn có admin cpanel để quản lý nội dung, nhưng có rất nhiều route có URI chứa admin. Để gom chúng lại thành một nhóm, ta sử dụng method prefix do Laravel cung cấp.

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
});

Dấu / sẽ tự động thêm nên bạn không cần phải lo lắng vì điều đó.

5. Tiền tố tên route (Route named prefix)

Cũng như route prefix, route named prefix sẽ thêm tiền tố tên chung cho mỗi route con nằm trong nhóm.

Route::name('admin.')->group(function () {
    Route::get('users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});

Bạn có thể thay thế ký tự ngăn cách . bằng ký tự khác, miễn sao phù hợp cú pháp code PHP.

Nếu như có một nhóm route có cùng chung namespace, prefix, name chẳng hạn thì ta có thể gom các thuộc tính này vào Route::group.

Route::group([
    'namespace' => 'Admin', 
    'prefix' => 'admin', 
    'name' => 'admin.'
], function() {
    //
});

Chú ý: Khi bạn build app với routes/api.php thì các route được khai báo sẽ tự động đưa vào trong một route group có prefix là /api.

Last updated