Raihan Uddin
Raihan Uddin

Reputation: 156

If form validation failed then redirect back with input using custom request class (laravel 5.8)

The problem is i want to return back with the inputs when the validation is fails. Here I'm using a custom request class to validate user input.

Now my question is where i place this piece of code on Controller Or in Request class.
or is there another way to do it?

Here is the code i want to use: return redirect()->back()->withInput();

Here is the Controller:

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\Admin\counter\CreateCounterRequest;
use App\Models\Admin\Counter;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class CounterController extends Controller
{
    public function store(CreateCounterRequest $request)
    {
        Counter::create([
            'title' => $request->title,
            'ion_icon' => $request->ion_icon,
            'counter_value' => $request->counter_value,
        ]);
        session()->flash('success', 'Counters created successfully.');
        return redirect(route('counter.index'));
    }
}

Here is the Request Class:

<?php

namespace App\Http\Requests\Admin\counter;

use Illuminate\Foundation\Http\FormRequest;

class CreateCounterRequest extends FormRequest
{
    public function rules()
    {
        return [
            'ion_icon' => 'required',
            'title' => 'required',
            'counter_value' => 'required|numeric',
        ];
    }

}

Upvotes: 3

Views: 2979

Answers (2)

FutsūnoShiyōnin
FutsūnoShiyōnin

Reputation: 41

you can use a method from FormRequest class, that is failedValidation() method.

and example code is like this:

protected function failedValidation(Validator $validator)
{
    return back()->withErrors($validator)->withInput();
}

you must add a argument from Illuminate\Contracts\Validation\Validator class to your method failedValidation and add Illuminate\Http\RedirectResponse class for get redirect method.

add Illuminate\Validation\ValidationException class, if not your method cant be read.

Upvotes: 4

albus_severus
albus_severus

Reputation: 3702

please check this

use Illuminate\Support\Facades\Validator;
protected function validator(array $data)
    {
        return Validator::make($data, [
            'ion_icon' => 'required',
            'title' => 'required',
            'counter_value' => 'required',
        ]);
    }
public function store(Request $request)
    {

        $validator = $this->validator($request->all());

        if ($validator->fails()) {
            return redirect()->route('your_route')->withInput(['title' => $request->title, 'icon_icon' => $request->icon_icon,'counter_value' => $request->couter_value,'phone_number'=>$request->phone_number])->withErrors($validator, 'your_desire_name');
        }
        Counter::create([
            'title' => $request->title,
            'ion_icon' => $request->ion_icon,
            'counter_value' => $request->counter_value,
        ]);
        session()->flash('success', 'Counters created successfully.');
        return redirect(route('counter.index'));
    }

Want In Your Blade File Show this error message

<div >

                                <input type="text" name="title" class="form-control"
                                       value="{{old('title')}}" required>


                            </div>
                            @if ($errors->your_desire_name->has('title'))


                                <span class="messages"><p
                                        class="text-danger error">{{ $errors->your_desire_name->first('title') }}</p></span>



                            @endif

Upvotes: 1

Related Questions