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

Posted

技术标签:

【中文标题】我可以通过 Laravel 5.1 中的自定义请求对象验证后恢复输入字段值吗?【英文标题】:Can I restore the input field values after validation through custom request objects in Laravel 5.1? 【发布时间】:2015-09-27 10:32:47 【问题描述】:

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

<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 对象,因此验证工作正常。

问题

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

【问题讨论】:

是验证正确后还是失败后 你明白了 :) @GideonAppoh! 仍然没有回答我的问题,是验证通过还是失败 【参考方案1】:

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

所以只需在刀片文件中使用 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>

【讨论】:

完美!非常感谢:) 没问题。很高兴它有帮助。 :)【参考方案2】:

您可以使用“旧输入法”:

$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();

以这种方式在刀片模板中获取旧值更加容易:

 old('username') 

更多关于“老输入法”的内容,请见here

【讨论】:

以上是关于我可以通过 Laravel 5.1 中的自定义请求对象验证后恢复输入字段值吗?的主要内容,如果未能解决你的问题,请参考以下文章

未定义的变量:请求 - Laravel 5.1

laravel 表单请求的自定义错误代码

处理来自 PHPUnit (Laravel 5.2) 的自定义异常

Laravel Spark 中的自定义验证消息

Laravel 5 中的自定义验证器

用户模型 laravel 中的自定义表