laravelvalidasiformMenengah3 mnt baca
Validasi dengan Form Request
Validasi input dengan elegan: rules, pesan kustom, dan class Form Request yang reusable.
Validasi cepat di controller
Cara paling ringkas untuk validasi sederhana:
php
// app/Http/Controllers/PostController.php
public function store(Request $request)
{
$validated = $request->validate([
'judul' => 'required|string|max:255',
'slug' => 'required|string|unique:posts,slug',
'isi' => 'required|string|min:50',
'status' => 'required|in:draft,published',
]);
Post::create($validated);
return redirect()->route('posts.index')
->with('sukses', 'Postingan berhasil dibuat!');
}Kalau validasi gagal, Laravel otomatis redirect kembali ke form dengan error dan input lama. Di Blade tampilkan dengan @error:
blade
<input name="judul" value="{{ old('judul') }}">
@error('judul')
<p class="error">{{ $message }}</p>
@enderrorForm Request: validasi yang reusable
Kalau rules dipakai di store dan update, atau butuh otorisasi, pindahkan ke class khusus:
bash
php artisan make:request StorePostRequestphp
// app/Http/Requests/StorePostRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePostRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->can('create', Post::class);
}
public function rules(): array
{
return [
'judul' => 'required|string|max:255',
'slug' => 'required|string|unique:posts,slug',
'isi' => 'required|string|min:50',
'status' => 'required|in:draft,published',
];
}
public function messages(): array
{
return [
'judul.required' => 'Judul wajib diisi ya.',
'isi.min' => 'Isi minimal 50 karakter, jangan pelit nulis.',
];
}
}Controller jadi bersih:
php
public function store(StorePostRequest $request)
{
// Sudah tervalidasi dan terotorisasi otomatis
Post::create($request->validated());
return redirect()->route('posts.index');
}Catatan teknis:
$request->validated()hanya mengembalikan field yang ada di rules. Ini sekaligus proteksi mass assignment: field iseng yang dikirim user tapi tidak ada di rules otomatis dibuang. Makanya selalu pakaivalidated(), bukanall(), saat create atau update.