在我的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()方法将显示现有值?
我确信我忽略了一些非常简单的事情,因为我还没有找到其他人的问题......
答案 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:
我在那里为Laravel回答了一个类似的问题,但我希望它对一般方法有帮助:Laravel 5.1: keep uploaded file as old input
答案 3 :(得分:-1)
删除重定向,您的验证和输入值应显示在同一页面上,仅在成功时重定向。