Bài 4: Route trong Laravel 5.x

Admin
27-03-2017

Trong Laravel  Route là nơi nhận request của người dùng (phương thức GET hoặc POST) sau đó có thể chỉ định (định tuyến) 1 action của 1 Controller thực hiện request đó. Khi tiếp cận Laravel ta không thể bỏ qua Route vì nó là tiền đề cho việc xử lý yêu cầu 

Vị trí route trong laravel

Từ phiên bản 5.1 trở về trước: Route được định nghĩa trong app/routes.php.

Từ phiên bản 5.2: Route được định nghĩa trong thư mục routes, phiên bản 5.3 chia ra 2 file web.php và api.php giúp bạn thêm tùy chọn phát triển web và api riêng 

Một số phương thức có sẵn của Route trong Laravel

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Nếu bạn muốn sử dụng chung nhiều phương thức Laravel hỗ trợ bạn phương thức match any

Route::match(['get', 'post'], '/', function () {
    // xử lý phương thức GET và POST
});

Route::any('foo', function () {
    // xử lý tất cả
});

Truyền tham số (Route Parameters)

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
   // Tham số được biểu diễn trong dấu ngoặc nhọn
   // Ví dụ lấy id của user và show ra màn hình
});

Nếu bạn muốn truyền nhiều tham số:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    // Truyền 2 tham số {post} và {comment}
});

Route với Tham số không bắt buộc

Nếu bạn muốn tham số truyền vào có hay không đều được, bạn có thể đặt dấu ( ? ) ngay sau tên tham số để đánh dấu nó là tham số không bắt buộc:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

Đặt điều kiện cho Route

Bạn  có thể dùng Regex để qui định format cho các tham số ở cùng một vị trí trong URL, bằng cách dùng hàm where()  để khai báo.

Route::get('user/{name}', function ($name) {
    // Route có tham số nhận giá trị chuỗi
})
->where('name', '[A-Za-z]+');
 
Route::get('user/{id}', function ($id) {
    // Route có tham số nhận giá trị số
})
->where('id', '[0-9]+');
 
Route::get('user/{id}/{name}', function ($id, $name) {
    // Route có tham số nhận giá trị chuỗi và số
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

Đặt tên route trong Laravel

Route::get('user/profile', function () {
    // Route có tên là profile
})->name('profile');

Bạn cũng có thể đặt tên và chỉ định 1 action trong Controller

Route::get('user/profile', 'UserController@showProfile')->name('profile');

Gom nhóm trong Route

Nếu bạn muốn gom nhiều route vào thành 1 nhóm các thuộc tính chung như middleware hay namespaces, ban có thể sử dụng Route::group

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
        // Nhóm các user đã được chứng thực
    });

    Route::get('user/profile', function () {
        // Nhóm các user đã được chứng thực
    });
});

Tạo tiền tố cho Group

Nếu bạn muốn nhóm Route có thêm 1 tiền tố phía trước như admin chẳng hạn bạn có thể viết

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

 

Tổng Kết

Qua bài này các bạn đã có được kiến thức cơ bản về Route trong laravel 5.x, bài tiếp theo mình sẽ giới thiệu về controller trong Laravel hy vọng các bạn đón xem, nếu có bất kì thắc mắc bạn có thể comment hoặc gửi liên hệ cho mình. Chúc các bạn thành công!