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

Blade Template Tutorial Three Template Inheritance in Laravel 11