[Deep Dive] Chọn Laravel Starter Kit nào? Đừng để sự "tiện tay" bóp chết hệ thống của bạn
1. Lời mở đầu: Đừng chọn đại!
Anh em làm Laravel lâu năm chắc không lạ gì cảnh: Sếp bảo "Lên demo gấp cho anh cái dashboard trong 2 ngày". Tiện tay, anh em gõ laravel new rồi táng luôn Jetstream vì thấy nó có sẵn đủ thứ: từ quản lý Team, API Token đến 2FA.
Kết quả? Sau 3 tháng, dự án phình to, anh em muốn custom lại logic đăng ký thì bị lạc giữa một rừng Actions, Livewire components và Fortify. Lúc đó mới thốt lên: "Biết thế dùng Breeze cho nhẹ nợ!".
Hôm nay, tôi sẽ mổ xẻ hai "vũ khí" hạng nặng của Laravel là Breeze và Jetstream, để anh em biết rõ lúc nào nên cầm dao mổ trâu, lúc nào nên dùng dao gọt hoa quả.
2. Laravel Breeze: "Minimalism" nhưng không hề đơn giản
Breeze không chỉ dành cho người mới. Đối với những dự án mà UI/UX được thiết kế riêng hoàn toàn (Custom Design), Breeze là chân lý.
Tại sao? Vì nó "mở". Nó cài thẳng đống Controller và Route vào thư mục app của bạn. Bạn muốn sửa gì cũng được, không cần phải qua các lớp trung gian phức tạp.
Code Demo: Custom logic sau khi đăng ký với Breeze
Giả sử hệ thống của bạn cần gửi một Webhook sang hệ thống CRM ngay sau khi user đăng ký xong. Với Breeze, bạn chỉ cần mở RegisteredUserController.php và chèn thêm 1 dòng:
public function store(Request $request): RedirectResponse
{
$request->validate([...]);
$user = User::create([...]);
event(new Registered($user));
// Heavyweight Tip: Đừng viết logic ở đây, hãy đẩy vào Job
dispatch(new SyncUserToCrmJob($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
3. Laravel Jetstream: Con quái vật Enterprise
Jetstream là một cấp độ hoàn toàn khác. Nó không chỉ là Login/Register; nó là một nền tảng quản lý người dùng hoàn chỉnh.
Điểm ăn tiền nhất: Laravel Fortify và Laravel Actions.
Jetstream không để Controller lộ thiên như Breeze. Nó giấu logic vào Actions. Đây là cách triển khai Action Pattern cực kỳ mẫu mực mà anh em nên học tập để viết code chuẩn SOLID.
Deep Dive: Custom logic Update Profile trong Jetstream
Bạn không tìm thấy Controller nào cả. Mọi thứ nằm ở app/Actions/Fortify/UpdateUserProfileInformation.php.
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
{
public function update(User $user, array $input): void
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
])->validateWithBag('updateProfileInformation');
// Logic xử lý cực kỳ tách biệt
if ($input['email'] !== $user->email && $user instanceof MustVerifyEmail) {
$this->updateVerifiedUser($user, $input);
} else {
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
])->save();
}
}
}
Lưu ý "hạng nặng": Việc sử dụng forceFill và Actions giúp logic của bạn có thể tái sử dụng ở bất cứ đâu: từ Web UI, API cho đến Console Command mà không cần gọi lại Controller.
4. Kết luận: "Know your tools"
- Dùng Breeze khi bạn muốn toàn quyền kiểm soát UI, dự án không quá phức tạp về quản lý phân quyền/team, hoặc bạn muốn học cách Laravel vận hành cơ bản.
- Dùng Jetstream khi bạn đang làm dự án SaaS, cần bảo mật cao (2FA), có tính năng Teams và bạn chấp nhận việc phải học cách làm việc với Actions để đổi lấy một hệ thống chuẩn chỉ Enterprise
Đừng biến dự án thành một "bãi rác" vì cài quá nhiều thứ không cần thiết. Một gã thợ code giỏi là người biết khi nào nên để mọi thứ đơn giản nhất có thể.
Chúc anh em chọn đúng "vợ" cho project của mình! Nhớ upvote nếu thấy bài viết giúp ích cho anh em nhé!
All rights reserved