Ở bài trước chúng ta đã tìm hiểu về 4 loại Route trong Laravel là Route::get(),post(),any(),match(),.. rồi, ở phần này chúng ta sẽ tìm hiểu tiếp về Route::resource() trong Laravel nhé các bạn.
1. Route::resource().
Route::resource() là một route có chức năng giúp chúng ta Xây dựng RESTful(web sevice) một cách nhanh chóng.
Cú Pháp Route::resource().
Route::resource('url', 'tencontroller', 'tuybien');
Trong đó:
- Url: thì cũng như các route khác là đường dẫn của route.
- tencontroller: là tên của controller (không đi kèm đuôi .php).
- tuybien: là các tùy biến phương thức được sử dụng trong Route, Tham số này có thể bỏ qua nếu không cần thiết.
Chú ý: Để sử dụng được Route::resource() thì các bạn cần phải tạo ra một RESTful Controller.
2. Tạo RESTful Controller
Để tạo một RESTful Controller chúng ta có hai các tạo:
Cách 1: Là tạo bằng tay và viết code cũng bằng tay.
Cách 2: Dùng lệnh mà laravel cung cấp sẵn cho chúng ta. Các bạn mở commanline lên và trỏ đến thư mục chứa project Laravel (VD của tôi là laravel-tutorial) và gõ lệnh.
php artisan make:controller TenController --resource
Ví dụ ở đây mình tạo controller DemoController thì gõ code như sau:
php artisan make:controller DemoController --resource
Một controller có tên là DemoController sẽ được tạo trong thư mục laravel-tutorial/app/Http/Controllers
và nó có dạng
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class DemoController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
Chú thích các function:
- index(): Hiển thị một danh sách.
- create(): Thêm mới.
- store(): Lưu mới.
- show($id): Hiển thị một dữ liệu theo tham số truyền vào.
- edit($id): Sửa một dữ liệu theo tham số truyền vào.
- update($id):Cập nhật một dữ liệu theo tham số truyền vào.
- destroy($id):Xóa một dữ liệu theo tham số truyền vào.
Điểm mạnh của RESTful Controller là sinh ra cho chúng ta các phương thức luôn có trong một ứng dụng
VD: Chúng ta có một route
Route::resource('oto', 'OtoController');
Thì phương thức cũng như kiểu request của nó sẽ như sau.
Verb | Path | Action | Route Name |
---|---|---|---|
GET | /oto | index | oto.index |
GET | /oto/create | create | oto.create |
POST | /oto | store | oto.store |
GET | /oto/{oto} | show | oto.show |
GET | /oto/{oto}/edit | edit | oto.edit |
PUT/PATCH | /oto/{oto} | update | oto.update |
DELETE | /oto/{oto} | destroy | oto.destroy |
Trong đó:{oto} là các tham số id của photo (xem truyền tham số trong route).
Khả năng tùy biến
Có thể thấy RESTful Controller có rất nhiều action và Laravel cũng cung cấp cho chúng ta lọc action trong Route::resource() để lọc các phương thức được sử dụng trong RESTful :
Ví dụ chúng ta sử dụng Lọc các phương thức được sử dụng trong RESTful:
Route::resource('urlroute', 'OtoController', ['only' => ['index', 'create', 'show', 'edit']]);
Giải thích: Ở trên là đoạn code chỉ cho sử dụng các action được khai báo còn lại sẽ không được sử dụng
Ví dụ chúng ta sử dụng Lọc các phương thức không được sử dụng trong RESTful:
Route::resource('duong dan route', 'OtoController', ['except' => ['index']]);
Giải thích: Cấm không cho sử dụng action index còn lại được sử dụng hết.
Lời kết:
Phần Route resource() trong Laravel có chút khó hiểu vì vậy các bạn cần chú ý theo dõi nhé. Chúc các bạn học tốt!