Hello Devs, 

In this tutorial, we will learn Laravel 8 Custom Validation Rules Example

Validation is a primary requirement of every project, without validation we can not release successful applications or websites.

But if we want to create our own custom validation like given value should be in uppercase or lowercase etc as we require.

Follow this step-by-step guide below. 


Step 1: Create Custom Validation Rule

php artisan make:rule CheckAgeRule

app/Rules/CheckAgeRule.php

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CheckAgeRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if ($value < 30) {
            return true;
        }
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be less than 30.';
    }
}



Step 2: Add Routes

routes/web.php

use App\Http\Controllers\CustomValidationController;

//Custom Validation
Route::get('/custom-validation', [CustomValidationController::class, 'index'])->name('custom.validation.index');
Route::post('/custom-validation/store', [CustomValidationController::class, 'store'])->name('custom.validation.store');


Step 3: Create CustomValidationController

php artisan make:controller CustomValidationController

We will create create seven methods by default as bellow methods

  1. index()
  2. store()

copy the below code and paste it on CustomValidationController.php file.

app/Http/Controllers/CustomValidationController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Rules\CheckAgeRule;

class CustomValidationController extends Controller
{
    public function index()
    {
    	return view('customValidation');
    }

    public function store(Request $request)
    {
    	$request->validate([
            'name' => 'required',
            'age' => [
                'required', 
                new CheckAgeRule()
            ]
        ]);

    	dd("continue...");
    }
}



Step 4: Create View File

resources/views/customValidation.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 8 Custom Validation</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" integrity="sha256-NuCn4IvuZXdBaFKJOAcsU2Q3ZpwbdFisd5dux4jkQ5w=" crossorigin="anonymous" />
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-6 offset-3 mt-5">
            <div class="card mt-5">
                <div class="card-header text-center bg-info">
                    <h2 class="text-white"> <strong>Custom Validation</strong></h2>
                </div>
                <div class="card-body">
                    @if (count($errors) > 0)
                        <ul class="alert alert-danger pl-5">
	                        @foreach($errors->all() as $error)
	                           <li>{{ $error }}</li> 
	                        @endforeach
                        </ul>
                    @endif
                    <form action="{{ route('custom.validation.store') }}" method="post">
                        @csrf
                        <div class="form-group">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control">
                        </div>
                        <div class="form-group">
                            <label>Age</label>
                            <input type="text" name="age" class="form-control">
                        </div>
                        <div class="text-center">
                            <button class="btn btn-success"><i class="fa fa-floppy-o" aria-hidden="true"></i> Save </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>


run the below command for a quick run:

php artisan serve

open bellow URL on your browser:

http://localhost:8000/custom-validation


May this example help you.