我可以通过 Laravel 5.1 中的自定义请求对象验证后恢复输入字段值吗?

Can I restore the input field values after validation through custom request objects in Laravel 5.1?

假设我有一个简单的联系表。

<form action="/message" method="post">
    {!! csrf_field() !!}
    <div class="form-group">
        <label>Name: </label>
        <input type="text" name="name" class="form-control">
    </div>

    <div class="form-group">
        <label>Email: </label>
        <input type="email" name="email" class="form-control">
    </div>

    <div class="form-group">
        <label>Your Message: </label>
        <textarea name="message" class="form-control"></textarea>
    </div>

    <div class="form-group">
        <button class="btn btn-primary">Submit Message</button>
    </div>
</form>

这是我处理该请求的控制器:

public function sendMessage(ContactRequest $request)
{
    dd($request->all());
}

请注意,我正在注入 ContactRequest 对象,因此验证工作正常。

问题

如何恢复联系表中的旧输入值?这样用户就不必重新填写所有字段。

你可以使用"old input"方法:

$request->flash(); //to put the posted data to session

$username = $request->old('username'); //to get the values you previously stored

如果你正在做一个重定向 8back 到你的表单)那么你可以这样闪现:

return redirect('form')->withInput();

通过这种方式在 blade 模板中获取旧值更容易:

{{ old('username') }}

有关 "old input" 方法的更多信息,请参见 here

如果 ContactRequest 验证失败,您将被重定向到包含错误和旧输入的表单。

所以只需在 blade 文件中使用 {{ old('field') }}

您的代码示例:

<form action="/message" method="post">
{!! csrf_field() !!}
<div class="form-group">
    <label>Name: </label>
    <input type="text" name="name" value="{{ old('name') }}" class="form-control">
</div>

<div class="form-group">
    <label>Email: </label>
    <input type="email" name="email" value="{{ old('email') }}"  class="form-control">
</div>

<div class="form-group">
    <label>Your Message: </label>
    <textarea name="message" class="form-control">{{ old('message') }}"</textarea>
</div>

<div class="form-group">
    <button class="btn btn-primary">Submit Message</button>
</div>