Developer Snippet Diary

Laravel Validation And Repopulating Forms (form values preserve in view ), GET and Post requests

Laravel Validation is a feature of the Laravel framework that provides a convenient way to validate incoming data from HTTP requests, form submissions, or any other data source. Validation is an important part of any web application, as it helps ensure that user input is correct and meets certain requirements before it is processed or stored. Here is an example

1. Make Route ie

Route::post('/insertdata', [insertdata::class, 'insertdata'])->name("insertdata");

In Controller

public function insertdata(Request $request)
    {
        $validated = $request->validate([
           'title' => 'required',
       ]);
       //////////////// OR
        $validated = $request->validate([
            'email' => 'required',
        ], [
            'email.required' => 'Please provide your email address.',
        ]);

    }

In view

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

<form method="post" action="{{ route('insertdata') }}">
   <input type="text" name="title">
<input type="submit" value="submit">
</form>

It will display error if we leave empty title

 

ERROR DIRECTIVE: 

In Laravel, the @error directive is a Blade directive that is used to display validation error messages in a view. The @error directive is used in combination with the ->withErrors() method of the Validator class to pass validation error messages to the view.

Now if we want to get class inside input we use error blade directive. If we leave title is empty class is-invalid is added.

<form method="post" action="{{ route('insertdata') }}">
   <input type="text" name="title" class="@error('title') is-invalid @enderror">
<input type="submit" value="submit">
</form>

We can also set div below input field to show better error text 

<form method="post" action="{{ route('insertdata') }}">
   <input type="text" name="title" class="@error('title') is-invalid @enderror">
@error('review_title')
     <div class="alert alert-danger">{{ $errors->first('review_title') }}</div>
@enderror

<input type="submit" value="submit">
</form>

Determining If Messages Exist For A Field

if ($errors->has('email')) {
    //
}

Loop errors

foreach ($errors->all() as $message) {
    //
}

Repopulating Forms

framework flash all of the request's input to the session if redirect occure. To retrieve use  old method on an instance of Illuminate\Http\Request. 

$title = $request->old('title');

<input type="text" name="title" value="{{ old('title') }}">

Nullable validation rule:

'publish_at' => 'nullable|date',

it may be either null or a valid date representation. If the nullable modifier is not added to the rule definition, the validator would consider null an invalid date.

CUSTOM ERROR MESSAGES:

add  below code in your controller

use Illuminate\Support\Facades\Validator;
            $rules = [
                'name' => 'required|max:255',
                'email' => 'required|email',
            ];
            $messages = [
                'required' => 'The :attribute field is required.',                
                'email.email' => 'Please enter a valid email address',
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return redirect()->back()
                    ->withErrors($validator)
                    ->withInput();
            }

OR

$custom_message = [       
      'first_name.required' => 'Please enter a valid Name',
];
$validator = Validator::make($request->all(), $rules, $messages);

$validation = Validator::make($input, [
            'first_name' => ['required', 'string', 'max:255'],         
        ], $custom_message)->validate();

All rules list here

Accepted,Accepted If,Active URL,After (Date),After Or Equal (Date),Alpha,Alpha Dash

https://laravel.com/docs/9.x/validation#available-validation-rules

_________________________

Controller.php

session()->flashInput($request->input());
return view('index.php');

View.php

{{ old('name') }}

{{Request::old('name')}}

How to echo image path:

{{Storage::url($customer->image)}}


GET REQUEST:

View

<form action="/search" method="GET">
  <input type="email" name="email" />
  <button type="submit">Submit</button>
</form>

Controller

use Illuminate\Http\Request;
public function search(Request $request)
{
    $email = $request->input('email');
    return view('search-results', compact('name', 'email'));
}

Route:

Route::get('/search', 'YourController@search');

GET Query parameter inside view 

app('request')->input('email')

POST REQUEST:

View

<form action="/submit" method="POST">
    @csrf <!-- Add this CSRF token for security -->
    <input type="email" name="email" />
    <button type="submit">Submit</button>
</form>

Controller:

use Illuminate\Http\Request;
public function submit(Request $request)
{
    $email = $request->input('email');
    return redirect('/success');
}

Route:

Route::post('/submit', 'YourController@submit');

 

Posted by: R GONDAL
Email: rizikmw@gmail.com