我正在开发一个Laravel项目,我为表单页面设置了路径,它在GET上显示表单并在POST上分析它:
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',
]);
如果成功,则代码将继续执行并保存所有内容,但如果不成功,则会将用户重定向回表单。有没有办法让文件选择,以便用户不需要再次查找?
答案 0 :(得分:0)
我建议使用服务器端代码验证(不是javascript,虽然从用户的角度来看两者都很好(但显然不依赖于js验证)。
我通常在Laravel中这样验证(我不是他们内置验证器的最大粉丝)。然后在验证之后,您可以使用Laravel的File类来获取文件名并将数据重新发布到视图中:
SELECT ta.FirstN, ta.LastN, tbc.*
FROM
(SELECT UserID, tblc.*
FROM TableB AS tblb
CROSS APPLY(
SELECT TOP(1) *
FROM TableC AS tblc
WHERE tblb.ViewID = tblc.ViewID
AND LogDate >= CAST(CURRENT_TIMESTAMP AS DATE)
AND LogDate < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
ORDER BY LogDate DESC
) tblc
WHERE Status = 1
) tbc
LEFT JOIN TableA ta ON ta.UserID = tbc.UserID;
或者如果您更喜欢非外观方式:
$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 File类。