【问题标题】:Get old input via old() in laravel 5.5 not working在 laravel 5.5 中通过 old() 获取旧输入不起作用
【发布时间】:2021-09-07 15:44:11
【问题描述】:

这是我的控制器。我正在尝试验证表单并显示错误消息(如果有)。表单验证正常,但如果验证失败,当它重定向回表单时,旧表单值不起作用

<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Frontend\AbstractController as FrontendController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;



class ContactFormController extends FrontendController
{
    protected $validationRules = [
        'Name'      => 'required',
        'email-360' => 'required|email',
        'telephone' => 'required',
        'Bio'       => 'required',
    ];

    public function index(Request $request)
    {
        $request->flash();
        $viewData = [
            'meta_title'       => _('Contact Us'),
            'meta_description' => _(''),
        ];
        return view('frontend.contact-form', $viewData);
    }

    public function saveContactForm(Request $request)
    {
        $validationMessages = [
            'Name.required' => _('This field is required.'),
            'email-360.required' => _('This field is required.'),
            'telephone.required' => _('This field is required.'),
            'Bio.required' => _('This field is required.'),
        ];

        $request->flash();
        $validation = Validator::make($request->all(), $this->validationRules, $validationMessages);
        if ($validation->fails()) {
            return redirect()->back()->withInput()->withErrors($validation);
        }
    }

}

这是contact-form.blade.php,其中错误消息按预期正确显示错误,但未显示旧值

@extends('layout.front')
@section('content')
<form action="{{ action('Frontend\ContactFormController@saveContactForm',$locale) }}" method="post" class="wpcf7-form" enctype="multipart/form-data" novalidate="novalidate">
    {{ csrf_field() }}
    <input name="_method" type="hidden" value="POST">

    <div class="entry">
        <div class="label" style="vertical-align: top;">{{ _('Full Name') }}<sup>*</sup></div>
        <div class="field">
            <span class="wpcf7-form-control-wrap Name">
                <input type="text" name="Name" value="{!! old('Name') !!}" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false">
                <span role="alert" class="wpcf7-not-valid-tip">{{ $errors->first('Name') }}</span>
            </span>
        </div>
    </div>
    <div class="entry">
        <div class="label" style="vertical-align: top;">{{ _('SA Email Address') }}<sup>*</sup></div>
        <div class="field">
                <span class="wpcf7-form-control-wrap email-360">
                    <input type="email" name="email-360" value="{{ old('email-360') }}" size="40" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" aria-required="true" aria-invalid="false">
                    <span role="alert" class="wpcf7-not-valid-tip">{{ $errors->first('email-360') }}</span>
                </span>
        </div>
    </div>

    <div class="entry">
        <div class="label" style="vertical-align: top;">{{ _('Phone Number') }}<sup>*</sup></div>
        <div class="field">
            <span class="wpcf7-form-control-wrap telephone">
                <input type="text" name="telephone" value="{{ old('telephone') }}" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" placeholder="123-456-7890">
                <span role="alert" class="wpcf7-not-valid-tip">{{ $errors->first('telephone') }}</span>
            </span>
        </div>
    </div>
    <div class="entry">
        <div class="label" style="vertical-align: top;">{{ _('Tell Us About Yourself &amp; Your Experiences As A Sugar Baby.') }}
            <sup>*</sup></div>
        <div class="field">
            <span class="wpcf7-form-control-wrap Bio">
                <textarea name="Bio" cols="40" rows="10" minlength="300" class="wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required" aria-required="true" aria-invalid="false">
                    {{ old('Bio') }}
                </textarea>
                <span role="alert" class="wpcf7-not-valid-tip">{{ $errors->first('Bio') }}</span>
            </span>
            <br>
            {{ _('(300 Character Minimum)') }}
        </div>
    </div>
    <div class="entry">
        <div class="label">{{ _('Headshot') }}<sup>*</sup></div>
        <div class="field">
                <span class="wpcf7-form-control-wrap Headshot">
                    <input type="file" name="Headshot" size="40" class="wpcf7-form-control wpcf7-file wpcf7-validates-as-required" aria-required="true" aria-invalid="false">
                    <span role="alert" class="wpcf7-not-valid-tip">{{ $errors->first('Headshot') }}</span>
                </span>
        </div>
    </div>
    <div class="entry">
        <div class="label"></div>
        <div class="field"><input type="submit" value="Send" class="wpcf7-form-control wpcf7-submit"></div>
    </div>
</form>

@endsection

如何解决错误?

【问题讨论】:

  • redirect()-&gt;back() 之后是否还有其他重定向发生?
  • 我已经更新了我的问题

标签: php laravel-5 laravel-5.5


【解决方案1】:

将输入添加到您的重定向中:

return redirect()->back()->withInput($request->all())->withErrors($validation);

【讨论】:

  • 在你的视图中做 {{var_dump($request)}} 看看你是否有旧值
  • if ($validation->fails()) { //print_r($request->old()) //工作正常 return redirect()->back()->withInput()- >withErrors($验证); }
  • @RajatJain 你读过我的评论了吗,我在控制器中的视图中感到难过
  • 是的,我阅读了您的评论。我得到了“未定义的变量:请求”。
  • 试试{{var_dump(Session::all())}},如果没有ether那么你没有正确传递数据
【解决方案2】:

使用back() 代替redirect()-&gt;back()

return back()->withInput()->withErrors($validation);

【讨论】:

  • 您在echo old('telephone') 中看到了什么?如果填写错误,例如gdfgdg
  • @RajatJain 仅像 return back()-&gt;withInput(); 一样使用它。
  • 我没有从 old('email-360') 或 old('Name') 获得任何值,但显示了错误消息
  • 我已经按照你的建议使用这个
    return back()->withInput()->withErrors($validation);
  • @RajatJain:怎么样?你在echo old('telephone') 中看到了什么?如果填写错误,例如gdfgdg
【解决方案3】:

为仍在寻找的任何人发布此内容。

在您的控制器中,使用如下所示的所有输入进行重定向:

return redirect()->back()->withInput($request->all());

并在你的刀片文件中使其如下:

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

其他类型的输入元素类似,可以参考link

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2018-05-26
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多