1. Giới thiệu về Controller trong Laravel
Laravel framework là một mã nguồn mở cho phép các nhà phát triển xây dựng các ứng dụng web một cách nhanh chóng và dễ dàng. Nó cung cấp nhiều tính năng tiện ích cho phép các nhà phát triển xây dựng các ứng dụng web chất lượng cao với độ tin cậy và độ bảo mật cao.
Trong Laravel, Controller là một thành phần quan trọng trong mô hình MVC (Model-View-Controller). Controller giúp các nhà phát triển quản lý logic ứng dụng và xử lý các yêu cầu HTTP từ người dùng.
Ở các bài viết trước chúng ta đã tìm hiểu về route trong laravel và vòng đời của laravel và trong bài viết này, chúng ta sẽ tiếp tục tìm hiểu về Controller trong Laravel và cách sử dụng chúng để thiết kế website và ứng dụng website.
2. Cách tạo một Controller trong Laravel
Trước khi chúng ta bắt đầu tìm hiểu về cách sử dụng Controller trong Laravel, chúng ta sẽ tạo một Controller đơn giản. Để tạo một Controller mới, chúng ta có thể sử dụng lệnh Artisan của Laravel như sau:
php artisan make:controller PostController
Lệnh trên sẽ tạo ra một file có tên là PostController.php trong thư mục app/Http/Controllers. Nó cũng sẽ tạo ra một class PostController với một phương thức mặc định là index().
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
//
}
}
Trong ví dụ trên, chúng ta đã tạo một class PostController trong namespace App\Http\Controllers. Chúng ta cũng đã định nghĩa một phương thức index() trong Controller. Phương thức này sẽ được kế thừa từ phương thức mặc định là Controller, để xem trong phương thức này có gì thì bạn trỏ chuột vào và nhấn tổ hợp control + click nhé :))
3. Các phương thức của Controller trong Laravel
Về cơ bản thì ở controller bạn có thể tuỳ ý đặt tên các phương thức (function method) tuỳ theo ý đồ của bạn miễn sao khi nhìn vào người khác có thể đọc và hiểu được các function đó bạn đang viết gì là được. Nhưng để ứng dụng của bạn trở nên dễ đọc và vận hành thì bạn có thể sử dụng những phương thức căn bản sau để xử lý logic ứng dụng và xử lý các yêu cầu HTTP từ người dùng. Dưới đây là một số phương thức phổ biến trong Controller:
3.1. Phương thức index()
Phương thức index() được sử dụng để hiển thị danh sách các bản ghi trong cơ sở dữ liệu(CSDL) hoặc các thông tin khác. Ví dụ, nếu chúng ta muốn hiển thị danh sách các bài viết trong một trang blog, chúng ta có thể sử dụng phương thức index() để lấy danh sách các bài viết từ cơ sở dữ liệu và trả về chúng cho view để hiển thị
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}
Trong đoạn mã trên, chúng ta đã sử dụng phương thức all() của model Post để lấy danh sách các bài viết từ cơ sở dữ liệu. Sau đó, chúng ta trả về view là posts.index và truyền biến posts chứa danh sách các bài viết đó.
3.2. Phương thức create()
Phương thức create() được sử dụng để hiển thị một form để tạo mới một bản ghi. Ví dụ, nếu chúng ta muốn tạo mới một bài viết, chúng ta có thể sử dụng phương thức create() để hiển thị một form để người dùng nhập các thông tin cho bài viết đó.
public function create()
{
return view('posts.create');
}
trong đoạn mã trên, chúng ta đã trả về view posts.create để hiển thị form để tạo mới một bài viết.
3.3. Phương thức store()
Phương thức store() được sử dụng để lưu thông tin một bản ghi mới vào cơ sở dữ liệu. Ví dụ, nếu chúng ta muốn lưu thông tin một bài viết mới vào cơ sở dữ liệu, chúng ta có thể sử dụng phương thức store() để lưu thông tin đó.
public function store(Request $request)
{
$post = new Post;
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect('/posts');
}
Trong đoạn mã trên, chúng ta đã sử dụng đối tượng Request để lấy các thông tin về tiêu đề và nội dung của bài viết. Sau đó, chúng ta đã tạo một đối tượng Post mới và gán các giá trị này vào các trường của đối tượng đó. Cuối cùng, chúng ta đã lưu đối tượng Post vào cơ sở dữ liệu và chuyển hướng người dùng đến trang danh sách các bài viết.
3.4. Phương thức show()
Phương thức show() được sử dụng để hiển thị thông tin chi tiết về một bản ghi cụ thể. Ví dụ, nếu chúng ta muốn hiển thị thông tin chi tiết về một bài viết cụ thể, chúng ta có thể sử dụng phương thức show() để lấy thông tin về bài viết đó từ cơ sở dữ liệu và trả về cho view để hiển thị.
public function show($id)
{
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
}
3.5. Phương thức edit()
Phương thức edit() được sử dụng để hiển thị form để chỉnh sửa thông tin của một bản ghi cụ thể. Ví dụ, nếu chúng ta muốn sửa đổi thông tin của một bài viết cụ thể, chúng ta có thể sử dụng phương thức edit() để hiển thị form để người dùng có thể chỉnh sửa các thông tin đó.
Ví dụ, trong trường hợp chỉnh sửa thông tin của một bài viết, chúng ta sẽ tạo một form để người dùng có thể cập nhật các thông tin của bài viết đó. Trong phương thức edit(), chúng ta sẽ lấy thông tin của bài viết từ cơ sở dữ liệu và truyền nó vào view posts.edit, cùng với form để người dùng có thể chỉnh sửa thông tin của bài viết đó.
Ví dụ về phương thức edit() trong controller PostController:
public function edit($id)
{
$post = Post::findOrFail($id);
return view('posts.edit', compact('post'));
}
Trong đoạn mã trên, chúng ta đã sử dụng tham số $id để lấy thông tin về bài viết cần sửa đổi từ cơ sở dữ liệu. Nếu không tìm thấy bài viết, chúng ta sẽ trả về một trang lỗi. Nếu tìm thấy bài viết, chúng ta sẽ trả về view posts.edit và truyền biến post chứa thông tin về bài viết đó.
3.6. Phương thức update()
Phương thức update() được sử dụng để cập nhật thông tin của một bản ghi cụ thể. Ví dụ, nếu chúng ta muốn cập nhật thông tin của một bài viết cụ thể, chúng ta có thể sử dụng phương thức update() để cập nhật các thông tin đó.
public function update(Request $request, $id)
{
$post = Post::findOrFail($id);
$post->title = $request->title;
$post->content = $request->content;
$post->save();
return redirect()->route('posts.show', $post->id);
}
3.7. Phương thức destroy()
Phương thức destroy() được sử dụng để xóa một bản ghi cụ
thể. Ví dụ, nếu chúng ta muốn xóa một bài viết cụ thể, chúng ta có thể sử dụng phương thức destroy() để xóa bài viết đó.
public function destroy($id)
{
$post = Post::findOrFail($id);
$post->delete();
return redirect()->route('posts.index');
}
Trong đoạn mã trên, chúng ta đã sử dụng tham số $id để lấy thông tin về bài viết cần xóa từ cơ sở dữ liệu. Sau đó, chúng ta đã sử dụng phương thức delete() để xóa bài viết đó. Cuối cùng, chúng ta chuyển hướng người dùng đến trang danh sách bài viết.
4. Sử dụng Middleware trong Controller
Middleware trong Laravel là một cơ chế cho phép chúng ta xử lý các request trước khi chúng được xử lý bởi các phương thức trong Controller hoặc trước khi chúng được trả về cho người dùng.
Chúng ta có thể sử dụng middleware trong Controller bằng cách sử dụng phương thức middleware() trong Controller. Phương thức middleware() được sử dụng để đăng ký middleware cho toàn bộ Controller hoặc cho một phương thức cụ thể.
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
}
Trong đoạn code trên, chúng ta đã sử dụng phương thức middleware() để đăng ký middleware auth cho toàn bộ Controller UserController. Điều này có nghĩa là tất cả các phương thức trong UserController đều yêu cầu người dùng đăng nhập trước khi được truy cập.
Ngoài ra, chúng ta có thể đăng ký middleware cho một phương thức cụ thể bằng cách sử dụng phương thức middleware() trực tiếp trong phương thức đó.
class UserController extends Controller
{
public function index()
{
// ...
}
public function create()
{
// ...
}
public function store(Request $request)
{
// ...
}
public function show($id)
{
// ...
}
public function edit($id)
{
// ...
}
public function update(Request $request, $id)
{
// ...
}
public function destroy($id)
{
// ...
}
public function __construct()
{
$this->middleware('auth')->except(['index', 'show']);
}
}
Trong đoạn code trên, chúng ta đã đăng ký middleware auth cho toàn bộ UserController và đã sử dụng phương thức except() để chỉ định các phương thức index và show sẽ không yêu cầu người dùng đăng nhập trước khi truy cập.
5. Sử dụng Resource Controller
Resource Controller là một cách tiện lợi để xử lý CRUD, API cho một tài nguyên trong Laravel. Resource Controller sẽ tự động tạo các phương thức cho các hoạt động thường được sử dụng trong CRUD như hiển thị danh sách, hiển thị form thêm mới, lưu dữ liệu, hiển thị thông tin chi tiết, chỉnh sửa dữ liệu và xóa dữ liệu.
Để tạo một Resource Controller trong Laravel, chúng ta sử dụng câu lệnh Artisan make:controller với tùy chọn --resource.
php artisan make:controller UserController --resource
Sau khi chạy câu lệnh trên, Laravel sẽ tạo ra một Resource Controller có tên UserController và các phương thức cho các hoạt động CRUD sẽ được tạo ra tự động.
class UserController extends Controller
{
public function index()
{
// ...
}
public function create()
{
// ...
}
public function store(Request $request)
{
// ...
}
public function show($id)
{
// ...
}
public function edit($id)
{
// ...
}
public function update(Request $request, $id)
{
// ...
}
public function destroy($id)
{
// ...
}
}
Như vậy, chúng ta đã tạo ra một Resource Controller với các phương thức CRUD được tự động tạo ra bởi Laravel.
6. Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về Controller trong Laravel và cách sử dụng controller để xử lý các yêu cầu, logic từ người dùng. Chúng ta đã tìm hiểu về cách tạo Controller, cách sử dụng các phương thức trong Controller, cách truyền tham số vào Controller, cách sử dụng Middleware và Resource Controller trong Laravel.
Hiểu rõ về Controller là rất quan trọng để có thể phát triển ứng dụng Laravel một cách hiệu quả và đảm bảo rằng các yêu cầu từ người dùng được xử lý đúng cách. Chúc các bạn thành công trong việc học tập và phát triển ứng dụng Laravel!
Bạn có thể tham khảo thêm các bài viết liên quan đến Laravel trong seri học laravel cùng hozitech.