Form :: file:如何使用Input :: old在验证错误和/或更新后重新填充?

时间:2014-03-26 11:18:30

标签: php validation file-upload laravel-4

在我的PhotosController中,我试图修改编辑操作,以便它在Form :: file()输入字段中显示现有值(并且,如果验证失败,它将重新填充该字段)。

if ($validation->passes())
{
        // saves the image on the FS and updates the db entry
}

    return Redirect::route('photos.edit')
        ->withInput(Input::all())
        ->withErrors($validation)
        ->with('message', 'There were validation errors.');

上传过程运行正常,但是当我查看现有记录时,或者如果验证在创建时失败,则Form :: file不会显示该值。我查看了api中的方法,它只接受名称和可选的选项数组。而FormBuilder类中的其他方法允许我们使用Input :: old()。

设置值

我已经尝试将以下值传递给withInput,但它们一直无济于事:  *输入::全部()  *输入:: old()  *输入::除('photo_path')  *输入:: get('photo_path')

如何更新此项,以便在验证失败时,或者如果用户查看现有记录,Form :: file()方法将显示现有值?

我确信我忽略了一些非常简单的事情,因为我还没有找到其他人的问题......

4 个答案:

答案 0 :(得分:8)

显然你做不到。 出于安全原因,浏览器不允许您在文件输入上设置值。

有两个silimar问题,而不是laravel相关但我认为答案可以帮助你:

Can you re-populate file inputs after failed form submission with PHP or JavaScript?

Restoring the value of a input type=file after failed validation

答案 1 :(得分:2)

也许你最好的机会是进行验证客户端(javascript / jquery)。

当然必须有(ALWAYS)服务器端验证。 (记住javascript可以在客户端禁用)。

但我相信,这样99.99%的案例,表格提交都会成功!

基本上,当确实提交时,它已经使用与服务器相同的规则进行验证,因此它不会提交,直到它不是“服务器喜欢”:)

干杯

答案 2 :(得分:0)

对于复杂的表单提交,我建议使用AJAX:

  1. 您可以执行第一个进行服务器端验证的AJAX表单发送。
  2. 然后,如果一切正常,你应该通过Javascript启动表格POST并输入文件。
  3. 我在那里为Laravel回答了一个类似的问题,但我希望它对一般方法有帮助:Laravel 5.1: keep uploaded file as old input

答案 3 :(得分:-1)

删除重定向,您的验证和输入值应显示在同一页面上,仅在成功时重定向。