Form Request Validation tutorial in Laravel 11

 <!DOCTYPE html>

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Add User Data</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-4">
                <h1>Add New User</h1>

                @if($errors->any())
                <ul class="alert alert-danger">
                    @foreach($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
                @endif
                <form action="{{ route('addUser') }}" method="POST">
                    @csrf
                    <div class="mb-3">
                        <label class="form-label">Name</label>
                        <input type="text" value="{{ old('username') }}" class="form-control @error('username') is-invalid @enderror" name="username">
                        <span class="text-danger">
                            @error("username")
                                {{ $message }}
                            @enderror
                        </span>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Email</label>
                        <input type="email" value="{{ old('useremail') }}" class="form-control @error('useremail') is-invalid @enderror" name="useremail">
                        <span class="text-danger">
                            @error("useremail")
                                {{ $message }}
                            @enderror
                        </span>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Password</label>
                        <input type="password" value="{{ old('userpassword') }}" class="form-control @error('userpassword') is-invalid @enderror" name="userpassword">
                        <span class="text-danger">
                            @error("userpassword")
                                {{ $message }}
                            @enderror
                        </span>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Age</label>
                        <input type="text" value="{{ old('userage') }}" class="form-control @error('userage') is-invalid @enderror" name="userage">
                        <span class="text-danger">
                            @error("userage")
                                {{ $message }}
                            @enderror
                        </span>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">City</label>
                        <select class="form-control" name="usercity">
                            <option value="delhi">Delhi</option>
                            <option value="mumbai">Mumbai</option>
                            <option value="goa">Goa</option>
                            <option value="pune">Pune</option>
                        </select>
                        <span class="text-danger">
                            @error("usercity")
                                {{ $message }}
                            @enderror
                        </span>
                    </div>
                    <button type="submit" class="btn btn-primary">Submit</button>
                </form>
            </div>
        </div>
    </div>
</body>
</html>
Above File is resources\views\adduser.blade.php File




Below File is app\Http\Controllers\UserController.php File
<?php

namespace App\Http\Controllers;

use App\Http\Requests\UserRequest;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function addUser(UserRequest $request)
    {
        // return $request->all();
        // return $request->only(["username","usercity"]);
        return $request->except(["userpassword","usercity"]);
    }


    // public function addUser(Request $request)
    // {
    //     // dd($request->all());
    //     $request->validate([
    //         "username" => "required",
    //         "useremail" => "required|email",
    //         "userpassword" => "required|alpha_num|min:5",
    //         "userage" => "required|numeric|between:18,100",
    //         "usercity" => "required"
    //     ], [
    //         "username.required" => "Username field is required!",
    //         "useremail.required" => "Useremail field is required!",
    //         "useremail.email" => "Please Enter the correct Email Address!",
    //         "userpassword.required" => "User Password field is required!",
    //         "userpassword.alpha_num" => "User Password must be Alpha Numeric!",
    //         "userpassword.min" => "User Password length should not less than 5",
    //         "userage.required" => "User Age field is required!",
    //         "userage.numeric" => "User Age must be Numeric!",
    //         "userage.between" => "User Age must be between 18 to 100!",
    //         "usercity.required" => "User City field is required!"
    //     ]);
    //     return $request->all();
    // }
}





Below File is routes\web.php File
<?php

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get("/form", function() {
    return view("adduser");
});
Route::post("/add", [UserController::class, "addUser"])->name("addUser");





Below File is app\Http\Requests\UserRequest.php File
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

use Illuminate\Support\Str;

class UserRequest 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 [
            "username" => "required",
            "useremail" => "required|email",
            "userpassword" => "required|alpha_num|min:5",
            "userage" => "required|numeric|between:18,100",
            "usercity" => "required"
        ];
    }

    // Main Use of "FormRequest" Class is that Controller class will not be very Complex
    // Because all Validation code(of Controller Class) will include in "FormRequest" Class File and we can easily understand Code
    // And Controller class File will be Relax

    // messages() method is inbuilt method of Laravel which will override the "messages()" method which is already made in "FormRequest" Class
    // public function messages()
    // {
    //     return [
    //         "username.required" => "Username field is required!",
    //         "useremail.required" => "Useremail field is required!",
    //         "useremail.email" => "Please Enter the correct Email Address!",
    //         "userpassword.required" => "User Password field is required!",
    //         "userpassword.alpha_num" => "User Password must be Alpha Numeric!",
    //         "userpassword.min" => "User Password length should not less than 5",
    //         "userage.required" => "User Age field is required!",
    //         "userage.numeric" => "User Age must be Numeric!",
    //         "userage.between" => "User Age must be between 18 to 100!",
    //         "usercity.required" => "User City field is required!"
    //     ];
    // }

    // attributes() method is inbuild method of Laravel
    // Here below, only attributes names will only change, message will remain of Laravel default
    public function attributes()
    {
        return [
            "username" => "User Name",
            "useremail" => "User Email",
            "userpassword" =>  "User Password",
            "userage" => "User Age",
            "usercity" => "User City"
        ];
    }

    // prepareForValidation() method is inbuilt method of Laravel and this function returns nothing
    protected function prepareForValidation(): void
    {
        // In prepareForValidation() method, we perform task which is performed before Validation
        $this->merge([
            // "username" => strtoupper($this->username),
            "username" => Str::slug($this->username),
        ]);
    }

    // Be default, the value of $stopOnFirstFailure is False
    // $stopOnFirstFailure is the protected Super Global Variable
    // using $stopOnFirstFailure, we can show one error message of first Field at a time
    // protected $stopOnFirstFailure = true;
}





Comments

Popular posts from this blog

Eloquent Many to Many Relationship Tutorial in Laravel 11

Eloquent with JSON Data Columns Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11