Php Laravel 5未能保存上传数据的表单验证
我正在从事一个Laravel项目,我为一个表单页面设置了路线,在该页面上,GET显示表单,并在POST上分析表单:Php Laravel 5未能保存上传数据的表单验证,php,laravel-5,Php,Laravel 5,我正在从事一个Laravel项目,我为一个表单页面设置了路线,在该页面上,GET显示表单,并在POST上分析表单: Route::get('/update-data', [ 'as' => 'user.settings.edit-data', 'uses' => 'UserController@editData', ]); Route::post('/update-data', [ 'as' => 'user.settings.update-da
Route::get('/update-data', [
'as' => 'user.settings.edit-data',
'uses' => 'UserController@editData',
]);
Route::post('/update-data', [
'as' => 'user.settings.update-data',
'uses' => 'UserController@updateData',
]);
在这个表单中,我要求用户用文本填写两个字段,并要求他们上传两个文件。两个文件都必须是jpeg、png或pdf格式。在控制器中,我有:
$this->validate($request,
[
'phone' => 'required',
'email' => 'required|email',
'file1' => 'required|mimes:jpeg,png,pdf',
'file2' => 'required|mimes:jpeg,png,pdf',
]);
如果成功,那么代码将继续执行并保存所有内容,但如果不成功,则会将用户重定向回表单。有没有一种方法仍然可以选择文件,这样用户就不需要再次查找它?我建议使用服务器端代码进行验证(不是javascript,尽管从用户角度来看这两种代码都很好(但显然不依赖js验证) 我通常在Laravel中进行这样的验证(我不是他们内置验证器的最大粉丝)。在验证之后,您可以使用Laravel的File类获取文件名并将数据重新发布到视图中:
$file = Request::file('file1');
$accepts = ['jpeg', 'png', 'pdf'];
$ext = $file->getClientOriginalExtension();
$filename = $file->getClientOriginalName();
if( !in_array($ext, $accepts) )
{
return view('your-view')->withErrors('Invalid File Format');
}
else
{
//File has one of the correct extensions,
//return the filename to the view so it can be
//re-displayed in the input
return view('your-view', ['filename' => $filename]);
}
或者,如果您更喜欢非正面方式:
$file = $request->file('file1');
$accepts = ['jpeg', 'png', 'pdf'];
$ext = $file->getClientOriginalExtension();
$filename = $file->getClientOriginalName();
if( !in_array($ext, $accepts) )
{
return view('your-view')->withErrors('Invalid File Format');
}
else
{
//File has one of the correct extensions,
//return the filename to the view so it can be
//re-displayed in the input
return view('your-view', ['filename' => $filename]);
}
这充分利用了Laravels文件类。也许你可以将正在验证的文件保存到一个临时位置,向用户显示一个缩略图而不是文件输入,并且只显示无效文件的文件输入。我可以这样做,或者我可以使用Javascript甚至不提交,除非它是有效的。我只是想知道是否有内置的方法可能可以返回文件名,但浏览器无法知道文件在我的计算机文件系统结构中的位置,出于安全原因,据我所知,您无法知道。我将仔细研究一下这一点:。如果您在提交无效输入后真的试图保留文件,您可能会我必须将其保存为服务器上的临时文件。遗憾的是,这是普遍的共识。相反,您还可以添加Javascript验证,以防止表单在有效之前发送。i agree:D!Gl brother。