CRUD hoàn chỉnh: Laravel + React
Bài này xây một CRUDUser tối giản nhưng đủ các trạng thái quan trọng khi đi làm: list, create, edit, validation, loading, success feedback và delete confirmation.
1. Routes
routes/web.php
2. Form Request
app/Http/Requests/StoreUserRequest.php
app/Http/Requests/UpdateUserRequest.php
3. Controller
app/Http/Controllers/UserController.php
4. Share flash message
app/Http/Middleware/HandleInertiaRequests.php
5. Type dùng chung
resources/js/types/user.ts
6. Index page
resources/js/pages/Users/Index.tsx
7. Form component dùng lại
resources/js/components/users/UserForm.tsx
Nếu TypeScript version của adapter không export
InertiaFormProps theo đúng path bạn đang dùng, hãy để type form ở local project bằng ReturnType<typeof useForm<UserFormData>>. Ý chính của sample là lifecycle, không phụ thuộc vào alias type.8. Create page
resources/js/pages/Users/Create.tsx
9. Edit page
resources/js/pages/Users/Edit.tsx
Runtime flow cần hiểu
Checklist production
- Có Policy/Form Request thay vì chỉ disable button phía client.
- Disable submit trong
processingđể tránh double submit. - Delete phải có confirm hoặc undo pattern.
- List chỉ select các cột cần dùng.
- Pagination giữ query string.
- Flash là feedback ngắn; dữ liệu thật vẫn phải đến từ props mới.
- Không tự
setUsers([...])sau create/update nếu server redirect đã trả state chuẩn.