Route Trong Laravel (Phần 2): Cách Đặt Tên Nhóm Route

Route Trong Laravel (Phần 2): Cách Đặt Tên Nhóm Route
Đặt tên route và nhóm của route cũng không khó khăn gì. Các bạn chỉ cần vài phút để thực hiện thao tác này. Khi dò lại các đoạn code, các bạn sẽ không rối.

Ở bài trước, các bạn đã tìm hiểu qua route trong Laravel là gì. Ở bài này, các bạn sẽ tiếp tục tìm hiểu về cách đặt tên cho route và các nhóm của nó trong Laravel như thế nào. 

 

Đặt tên từng route 

 

Thay vì các bạn phải nhớ các URL của từng route, hãy đặt tên cho chúng để các bạn dễ dàng tương tác bằng phương thức name. Xem ví dụ sau:

 

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

 

Cùng với việc đặt tên, bạn sẽ dễ dàng lấy url từ route:

 

$url = route('home');

 

Bạn cũng có thể chuyển hướng đến route đó:

 

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

 

Nếu bạn đặt tên route có chứa tham số, thì bạn dễ truyền giá trị cho tham số. Thực hiện như thế này: 

 

Route::get('profile/{id}', function ($id) {
    //
})->name('profile');
$url = route('profile', ['id' => 1]); // /profile/1

 

Đặt tên nhóm route 

 

Các route trong cùng một nhóm sẽ được phân chia vào các thuộc tính route, chẳng hạn: namespace, middleware, tiền tố tên (route named prefix), tiền tố URI,…

 

Middleware route

 

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

 

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

 

Namespace route

 

Với nhóm namespace route, bạn nên khai báo namespace cho tất cả route con nằm trong nó. Ví dụ: 

 

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

 

Tất cả controller được gọi trong nhóm này sẽ được thêm namespace App\Http\Controllers\Admin. RouteServiceProvider đã kết nối các file route trong một group. Nó cho phép bạn đăng ký các controller mà không cần đầy đủ namespace App\Http\Controllers. Do đó, để khai báo một controller, bạn chỉ cần khai báo namespace khi bạn phân cấp cùng với tên của controller. 

 

Subdomain route

 

Laravel cung cấp nhóm sub-domain. Nhóm này có khả năng chỉ định tham số như một URI. Nó cho phép bạn giữ một phần sub-domain để sử dụng trong các route con. Để khai báo nhóm sub-domain, bạn dùng method domain như sau:

 

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

 

Tham số {account} có vai trò như một thành phần của từng URI route con. Thứ tự của nó phải được đứng trước vì toàn bộ URI sẽ như sau: 

 

{account}.myapp.com/user/{id}

 

Để đảm bảo các route subdomain có thể hoạt động được, bạn nên khai báo các route đó trước các route domain gốc. Điều này ngăn tình trạng domain gốc ghi đè lên các sub-domain có cùng URI. 

 

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 trong đó có rất nhiều URI chứa admin, vậy thì bạn phải làm sao? Bạn cần thu gom chúng lại thành một nhóm, các bạn nên dùng method prefix do Laravel cung cấp. Ví dụ: 

 

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

 

Dấu / sẽ được thêm tự động vào, nên bạn không cần phải lo thiếu nó. 

 

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

 

Tương tự route prefix, route named prefix sẽ thêm tiền tố tên chung cho mỗi route con nằm trong nhóm đó. Ví dụ: 

 

Route::name('admin.')->group(function () {

    Route::get('users', function () {

        // Route assigned name "admin.users"...

    })->name('users');

});

 

Với ký tự ngăn cách “.”, bạn có thể thay ký tự khác. Ký tự nào cũng được, miễn sao nó thích hợp với cú pháp code PHP. Nếu có một nhóm route có cùng namespace, prefix và name; thì bạn gom các thuộc tính này vào Route::group. Ví dụ:

 

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

 

Khi bạn xây dựng app với routes/api.php, các route đã được khai báo sẽ tự động đưa vào trong một nhóm route có prefix là /api.

 

Đặt tên các hàm, các biến,…không theo một nguyên tắc nhất định nào sẽ khiến các bạn rối và tự làm khó chính các bạn. Vì khi cần dò lại code, các bạn sẽ cảm thấy chán ngán và có khi phải bỏ. Bỏ và thực hiện lại từ đầu thì còn mệt mỏi hơn. Để tránh tình trạng như vậy, hãy đặt tên mỗi route và các nhóm của nó. 

 

 

 

 

 

 

 

 

Hồ Hữu Hiền

Mình là developer nên đôi khi viết bài không hay lắm mong các bạn thông cảm. Nếu muốn biết thêm thông tin về mình thì vui lòng vào website này để biết. https://huuhienqt.dev/

Bình luận (0)