sparkmix
sparkmix

Reputation: 2489

Laravel - prepopulate input data after validation failed

I used 5.4 and I've an index action in convert controller which shows the form and then have another action calculate in the convert controller. So the form has from-currency, amount, to-currency input and all of them are required.

Here's the validation I've for calculate action:

    $this->validate(request(), [
        'from_currency' => 'required|min:3|max:3|alpha',
        'to_currency' => 'required|min:3|max:3|alpha',
        'amount' => 'required|numeric',
    ]);

If the validation failed I want when showing the errors and the form it will prepopulate the input already.

Is there like a function I can use for Request ? I know how to get the domain/path inside blade like Request::root() and I also tried Request::input('from_currency) in the view but not work.

I even tried to set the view data like 'from_currency' => request('from_currency') and it's blank. Any idea?

Upvotes: 1

Views: 3900

Answers (3)

Martin Mbae
Martin Mbae

Reputation: 1266

You can also user Validate instead of Validator::make.

eg

 $this->validate($request, [
        'question' => "required|min:10|max:100",
        'answer' => "required|min:20|max:300",
        'rank' => "required|numeric|gt:0|lt:100",
    ]);

Then in your form use

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

This will automatically redirect back with input if the validator fails.

This way, you DO NOT have to include

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

Upvotes: 0

Yves Kipondo
Yves Kipondo

Reputation: 5603

When you are validating your form your request if it fail you can redirect to the same page with all the input which was submited

    $validator = Validator::make($request->all(), [
        'from_currency' => 'required|min:3|max:3|alpha',
        'to_currency' => 'required|min:3|max:3|alpha',
        'amount' => 'required|numeric',
    ]);

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

and in your blade view you can show the old value by ussing the old helper like this

<input type="text" name="from_currency" value="{{ old('from_currency') }}">
<input type="text" name="to_currency" value="{{ old('to_currency') }}">
<input type="text" name="amount" value="{{ old('amount') }}">

Upvotes: 2

Polaris
Polaris

Reputation: 1249

Try this

In your blade file, make sure your inputs have this:

<input type="text" ... value="{{ old('from_currency') }}" ... >.

Then in your controller...

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

Upvotes: 0

Related Questions