Xin chào a e. Hôm nay mình muốn giới thiệu đến các bạn route trong laravel là một phần khá quan trọng trong laravel.
Routing là gif? Routing hiểu đơn giản là nơi nhận request gửi từ client và tìm route nào có cơ sở đặc trưng giống với request để xử lý. Nhiệm vụ của routing là sẽ tìm các route đã khai báo ở trên và so sánh với request hiện tại các yếu tố như url, method… để tìm ra route cùng bản chất với request, sau đó tiến hành thực hiện controller/action được khai báo trong route đó.
Cấu trúc thư mục : Để viết Route trong Laravel thì chúng ta sẽ viết trong routes/web.php – định nghĩa các route cho web, còn routes/api.php để định nghĩa route cho api.
Các thành phần của 1 Route: Ta xem qua ví dụ về 1 route Route::method($uri, $callback);
Trong đó method là các phương thức để thực hiện route bao gồm 6 phương thức :
HTTP | Mục đích | Method | Mức độ an toàn |
---|---|---|---|
GET | Lấy tài nguyên | get | Có |
POST | Tạo tài nguyên | post | Không |
PUT | Cập nhật tài nguyên | put | Không |
PATCH | Cập nhật một phần tài nguyên | patch | Không |
DELETE | Xóa tài nguyên | delete | không |
URI là các đường dẫn route và callback là các hành động nào đó được thực thi, thường thì ta sẽ viết các hành động trong controller
Tiếp đến ta tìm hiểu Tham số trong Route: Nhiều khi chúng ta sẽ cần truyền tham số trên đường dẫn, chúng ta cũng có thể truyền trong route.
Lưu ý: Các tham số phải được định nghĩa trong cặp dấu {} , tên tham số không được chứa dấu (-) nếu cần có thể dùng dấy gạch dưới (_) để thay thế.
Ví dụ vì tham số : Route::get(‘user/{id}’, function($id) { echo “ID của user là : ” . $id; });
Đặt tên cho Route: Route cho phép đặt tên thuận tiện cho các URL hoặc chuyển hướng cho các route cụ thể. Bạn có chỉ định một tên cho route bằng cách thêm name vào định nghĩa route.
Ví dụ : Route::get(‘user/profile’, ‘UserController@showProfile’)->name(‘profile’);
Việc tái sử dụng route thông qua tên route khá dễ dàng ta chỉ cần khai báo {{route(‘tên route’)}};
Khi số lượng route trên website của bạn tăng lên, các URI dài và khó nhớ, việc đặt tên sẽ hiệu quả hơn nhiều so với việc bạn cộng chuỗi để tạo ra các URL mong muốn.
Nhóm Route: Tạo nhóm route giúp chúng ta chia sẻ các thành phần dùng chung, giống nhau giữa các route như middleware, namespace hay prefix. Để khai báo các chia sẻ này, ta viết vào một mảng và đặt vào tham số thứ nhất của hàm Route::group()
Chúng ta có một số trường hợp chia sẻ trong nhóm như sau:
- Namespace :
Namespace trong Laravel giông như PHP namespace được chỉ định với một nhóm controller.
Route::group(['namespace' => 'Admin'], function() {
// Controllers trong namespace "App\Http\Controllers\Admin"
});
- Prefix :
Chúng ta xét ví dụ sau :
Route::get('admin/posts', 'PostController@index');
Route::get('admin/posts/create', 'PostController@create');
Route::post('admin/posts/store', 'PostController@store');
Route::get('admin/posts/{id}/edit', 'PostController@edit');
Route::patch('admin/posts/{id}', 'PostController@update);
Route::patch('admin/posts/{id}', 'PostController@destroy');
Các bạn có thấy đặc điểm chung của các route trên không, nó đều bắt đầu bằng admin vì thể để viết gọn lại các URL thì chúng ta sẽ sử dụng prefix
để URL khi định nghĩa route ngắn gọn dễ nhìn hơn.
Route::group(['prefix' => 'admin'], function () {
Route::get('posts', 'PostController@index');
Route::get('posts/create', 'PostController@create');
Route::post('posts/store', 'PostController@store');
Route::get('posts/{id}/edit', 'PostController@edit');
Route::patch('posts/{id}', 'PostController@update);
Route::patch('posts/{id}', 'PostController@destroy');
});
Trên đây là những kiến thức cơ bản mình tìm hiểu về route. Mọi người góp ý để lại dưới comment nhé.
Nguồn tham khảo: https://viblo.asia/p/tap-10-routing-laravel-Qpmlew4oKrd#_2-mot-so-phuong-thuc-route-some-route-methods-3
https://viblo.asia/p/tim-hieu-ve-route-trong-laravel-V3m5W1pwZO7
https://laravel.com/docs/7.x/routing