Laravel Form Validation Tutorial with example step by step.
In this post, we will be learning all about Laravel Form Validation. There are many methods to do validations in Laravel.
This form validation happens on the FORM Submit in Laravel and all the validation codes are written in Controller.
Let's get started.
1. Create Validation
Example 1:To create Validation Rule write inside controller
$request->validate([
'name' => 'required|max:255',
'product_code' => 'required|max:255',
'price' => 'required|decimal:2',
'stock' => 'required|integer',
'is_active' => 'sometimes|boolean',
]);
Example 2: To create Validation Rule write inside controller
$request->validate([
'name' => ['required','max:255'],
'product_code' => ['required','max:255'],
'price' => [
'required',
'decimal:2'
],
'stock' => ['required','integer'],
'is_active' => 'sometimes|boolean',
]);
Example 3: Make Validation with a Customized Error Message
Write the custom message with the Validation inside the controller.
$request->validate([
'name' => 'required|max:255',
'product_code' => 'required|max:255',
'price' => 'required|numeric',
'stock' => 'required|integer',
'is_active' => 'sometimes|boolean',
], [
'name.required' => 'The name field is required.',
'name.max' => 'The name must not exceed 255 characters.',
'product_code.required' => 'The product code field is required.',
'product_code.max' => 'The product code must not exceed 255 characters.',
'price.required' => 'The price field is required.',
'price.numeric' => 'The price must be a number.',
'stock.required' => 'The stock field is required.',
'stock.integer' => 'The stock must be an integer.',
'is_active.boolean' => 'The is active field must be a boolean value.',
]);
2. Create Validation Using Validator Facade
Write the validation using the "Validator Facade" inside the Laravel Controller.
Example 1: Make Validation with Validator Facade
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
'product_code' => 'required|max:255',
'price' => 'required|numeric',
'stock' => 'required|integer',
'is_active' => 'sometimes|boolean',
]);
if($validator->fails()){
return redirect()->back()->withErrors($validator->errors())->withInput();
}
Example 2: Make Validation with Validator Facade
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'name' => ['required','max:255'],
'product_code' => ['required','max:255'],
'price' => ['required','numeric'],
'stock' => ['required','integer'],
'is_active' => 'sometimes|boolean',
]);
if($validator->fails()){
return redirect()->back()->withErrors($validator)->withInput();
}
Example 3: Make Validation with Customized Error Message using Validator Facade
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'name' => ['required','max:255'],
'product_code' => ['required','max:255'],
'price' => ['required','numeric'],
'stock' => ['required','integer'],
'is_active' => 'nullable|boolean',
],[
'name.required' => 'The name field is required.',
'name.max' => 'The name must not exceed 255 characters.',
'product_code.required' => 'The product code field is required.',
'product_code.max' => 'The product code must not exceed 255 characters.',
'price.required' => 'The price field is required.',
'price.numeric' => 'The price must be a number.',
'stock.required' => 'The stock field is required.',
'stock.integer' => 'The stock must be an integer.',
'is_active.boolean' => 'The is active field must be a boolean value.',
]);
if($validator->fails()){
return redirect()->back()->withErrors($validator)->withInput();
}
3. Displaying The Validation Errors
You can write the below code in the blade files as shown below:
Example 1: Using foreach loop show all messages.
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Example 2: Show each field error message.
@error('name') <span class="text-danger">{{$message}}</span> @enderror
@error('product_code') <span class="text-danger">{{$message}}</span> @enderror
@error('price') <span class="text-danger">{{$message}}</span> @enderror
4. Form Request Validation in Laravel
Step 1: Creating Form Requests using make:request Artisan CLI Command as follows:
php artisan make:request ProductFormRequest
This will create a new file inside App\Http\Requests folder named as ProductFormRequest.
Step 2: Open the Form Request file in following path : app/ Http/ Requests/ ProductFormRequest.php and paste the below code
In this form request validation file, the authorize() method is to set to "true" and in the rules() method the validation logic.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProductFormRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'name' => [
'required',
'max:255'
],
'product_code' => [
'required',
'max:255'
],
'price' => [
'required',
'nemuric'
],
'stock' => [
'required',
'integer'
],
'is_active' => [
'nullable',
'boolean'
],
];
}
}
STEP 3: Customizing The Error Messages
Now Let's add the custom error message in the above same ProductFormRequest.php file.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProductFormRequest extends FormRequest
{
//... your existing rules
//... your existing rules
/**
* Get the error messages for the defined validation rules.
*
* @return array<string, string>
*/
public function messages(): array
{
return [
'name.required' => 'The name field is required.',
'name.max' => 'The name must not exceed 255 characters.',
'product_code.required' => 'The product code field is required.',
'product_code.max' => 'The product code must not exceed 255 characters.',
'price.required' => 'The price field is required.',
'price.numeric' => 'The price must be a number.',
'stock.required' => 'The stock field is required.',
'stock.integer' => 'The stock must be an integer.',
'is_active.boolean' => 'The is active field must be a boolean value.',
];
}
}
STEP 4: Preparing Input For Validation
If you need to prepare or sanitize any data from the request before you apply your validation rules, you may use the prepareForValidation method.
In this prepareForValidation() method, I have shown an example of a product slug where we get the "Product Name" ($this->name) and make it a slug using Str::slug() method and merge the "slug" with FormRequest using merge() function.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
class ProductFormRequest extends FormRequest
{
//... your existing code
//... your existing code
//... your existing code
/**
* Prepare the data for validation.
*/
protected function prepareForValidation(): void
{
$this->merge([
'slug' => Str::slug($this->name),
]);
}
}
I hope this helps you. Thanks for reading.