Hôm nay mình sẽ giới thiệu với các bạn về controller trong laravel
Trước khi đi vào nội dung bài viết mình muốn các bạn chuẩn bị kiến thức về route để hiệu quả hơn nhé
Chắc hẳn các bạn còn nhớ đến mô hình MVC của laravel và controller là 1 phần trong đó, controller là phần sử lý trung tâm, nó nhận lệnh từ người dùng gửi lệnh đến các model để cập nhật dữ liệu và truyền lệnh đến view để cập nhật giao diện hiển thị.
Khởi tạo controller:
Mở terminal và gõ dòng lệnh:
php artisan make:controller ControllerName
Controller vừa tạo sẽ được lưu trữ ở:
app/Http/Controllers/ControllerName.php
Và các bạn phải lưu ý việc đặt tên controller phải giống với tên class trong file controller đó, và file controller phải đặt đúng trong thư mục controller
Sử dụng controller:
Quay lại với file route ở bài học trước cách để tạo một đường dẫn đến file home.blade.php:
Route::get('home', function () {
return view('home');
});
Với controller bạn có thể thực hiện hành động đó:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ControllerName extends Controller
{
public function index()
{
return view('home');
}
}
Khi đó nội dung file route sẽ thay đổi:
Route::get('/', [ControllerName::class, 'index']);
Resource Controller:
Trong laravel việc sử dụng các router post, get, group để gọi đến một hành động trong controller là không thể tránh khỏi. Vậy thử suy nghĩ nếu cứ mỗi lần chúng ta làm việc với các hành động thêm, xoá, sửa dữ liệu lại phải viết thêm một dòng route, việc đó có thể khiến file route trở nên dài và khó kiểm soát hơn. Vì vậy resource controllers được sinh ra để giúp chúng ta cải thiện việc đó.
Khởi tạo:
php artisan make:controller UserController --resource
File controller được sinh ra sau đó có nội dụng:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController 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)
{
//
}
}
Việc tiếp theo chúng ta phải làm là khai báo route cho controller trên:
Route::resource('users', 'UserController');
với dòng khai báo trên bạn đã khai báo cho toàn bộ hành động trong UserController
Còn nếu bạn chỉ muốn khai báo 1 vài hành động trong UserController bạn có thể thực hiện theo cú pháp:
Route::resource('users', 'UsersController')->only([
'index', 'show'
]);
với hàm only() chỉ sử dụng các hành động trong mảng bạn truyền vào
Hoặc
Route::resource('users', 'UsersController')->except([
'create', 'store'
]);
với hàm excepet() sẽ sử dụng tất cả ngoại trừ các hành động được truyền vào
Các hành động được sử lý bởi resource controller:
Phương thức | URL | Hành động | route |
GET | /users | index | users.index |
GET | /users/creste | create | users.create |
POST | /users | store | users.store |
GET | /users/{user} | show | users.show |
GET | /users/{user}/edit | edit | users.edit |
PUT/PATCH | /users/{user} | update | users.update |
DELETE | /users/{user} | destroy | users.destroy |
Hoặc bạn có thể thay đổi tên route bằng cú pháp:
Route::resource('users', 'UsersController')->names([
'index' => 'users.name'
]);
Qua bài vừa rồi hi vọng có thể giúp bạn hiểu hơn về controller trong Laravel. Nhớ đừng quên theo dõi hoclaravel.vn để xem được những bài viết bổ ích hơn nữa nhé.
Các bạn cũng có thể để lại câu hỏi nếu có bất cứ thắc mắc nào ở phần bình luận phía dưới.
Cập nhật thêm được vài kiến thức mới
Bài viết hữu ích.
Hữu ích
Cảm ơn Admin. Bài viết khá hay !
OK bạn, mình sẽ sắp xếp viết một bài về Extend Validation. Cảm ơn bạn đã quan tâm nhé.