Untuk memvalidasi input pengguna di Laravel, kamu dapat menggunakan validator bawaan yang disediakan oleh framework ini. Berikut adalah langkah-langkah untuk memvalidasi input pengguna menggunakan berbagai pendekatan di Laravel:

1. Memvalidasi Input di Controller

Contoh di controller ArticleController untuk memvalidasi input saat membuat artikel baru:


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Article;

class ArticleController extends Controller
{
	public function create()
	{
		return view('articles.create');
	}

	public function store(Request $request)
	{
		$validatedData = $request->validate([
				'title' => 'required|string|max:255',
				'content' => 'required|string',
		]);

		Article::create($validatedData);

		return redirect()->route('articles.index')->with('success', 'Article created successfully.');
	}
}

2. Membuat Request Khusus untuk Validasi

kamu dapat membuat request khusus untuk memisahkan logika validasi dari controller. Ini membuat controller kamu lebih bersih dan terstruktur.

Jalankan perintah berikut untuk membuat request khusus:

php artisan make:request StoreArticleRequest

Edit file app/Http/Requests/StoreArticleRequest.php:


namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreArticleRequest extends FormRequest
{
	public function authorize()
	{
		return true;
	}

	public function rules()
	{
		return [
			'title' => 'required|string|max:255',
			'content' => 'required|string',
		];
	}
}

Kemudian, gunakan request khusus ini di controller:


namespace App\Http\Controllers;

use App\Http\Requests\StoreArticleRequest;
use App\Models\Article;

class ArticleController extends Controller
{
	public function create()
	{
		return view('articles.create');
	}

	public function store(StoreArticleRequest $request)
	{
		Article::create($request->validated());
		return redirect()->route('articles.index')->with('success', 'Article created successfully.');
	}
}

3. Menampilkan Pesan Kesalahan di View

Untuk menampilkan pesan kesalahan di view, kamu dapat menggunakan blade directive @error dan old helper untuk mengisi kembali nilai input.

Contoh di view resources/views/articles/create.blade.php:


<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Create Article</title>
</head>
<body>
    <h1>Create Article</h1>

    @if ($errors->any())
        <div>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="{{ route('articles.store') }}" method="POST">
        @csrf
        <div>
            <label for="title">Title</label>
            <input type="text" id="title" name="title" value="{{ old('title') }}">
            @error('title')
                <div>{{ $message }}</div>
            @enderror
        </div>
        <div>
            <label for="content">Content</label>
            <textarea id="content" name="content">{{ old('content') }}</textarea>
            @error('content')
                <div>{{ $message }}</div>
            @enderror
        </div>
        <button type="submit">Create</button>
    </form>
</body>
</html>

4. Custom Validation Messages

kamu dapat menambahkan pesan kesalahan kustom dengan menambahkan array messages ke dalam request khusus.

Edit file app/Http/Requests/StoreArticleRequest.php:


public function messages()
{
	return [
		'title.required' => 'The title field is required.',
		'content.required' => 'The content field is required.',
	];
}

5. Validasi di Controller (Metode Manual)

Jika kamu ingin memvalidasi input secara manual di controller, kamu bisa menggunakan validator facade:


use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'title' => 'required|string|max:255',
        'content' => 'required|string',
    ]);

    if ($validator->fails()) {
        return redirect()->route('articles.create')
                         ->withErrors($validator)
                         ->withInput();
    }

    Article::create($request->all());

    return redirect()->route('articles.index')->with('success', 'Article created successfully.');
}

Kesimpulan

Dengan langkah-langkah di atas, kamu telah mempelajari berbagai metode untuk memvalidasi input pengguna di Laravel. Menggunakan fitur validasi Laravel membantu memastikan data yang masuk ke aplikasi kamu sesuai dengan aturan yang telah ditetapkan, sehingga aplikasi menjadi lebih aman dan stabil.