在控制器中我使用两个验证:
public function update(Request $request){
if( $request->hasFile('img1') ){
$request->validate(
[
'img1'=>'image'
]
);
}
if( $request->hasFile('img2') ){
$request->validate(
[
'img2'=>'image'
]
);
}
}
现在,如果我为img1&上传错误的文件类型img2仅检查第一个验证,并且laravel将用户重定向到原始表单页面。这样,仅显示用于第一次验证的消息。即使第二种文件类型也不正确。我想确保在重定向到我来自的页面之前执行所有验证方法,即包含表单的页面。
此外,我无法将{file}文件的验证方法放在一个if statement
中img1
,而img2
可能不会同时出现。因为用户可能只想上传一个文件。
答案 0 :(得分:0)
您无需多次调用validate方法来验证单个请求。在validate方法中,您可以验证请求中的所有输入,如果验证失败,则它将自动返回请求来自的页面。此外,您无需在验证之前检查请求是否包含输入。它将由laravel自动管理。
在以下验证中,required
用于指定该字段是必需的,并且它仅接受mimes
中指定的文件类型,max
用于指定以千字节为单位的最大文件大小。
public function update(Request $request){
$request->validate([
'img1' => 'required | mimes:jpeg,jpg,png | max:1000',
'img2' => 'required | mimes:jpeg,jpg,png | max:1000',
]);
}
答案 1 :(得分:0)
你可以尝试
public function update(Request $request){
$request->validate([
'img1' => 'required_without:img2',
'img2' => 'required_without:img1'
]);
}
如果有两个以上的字段且只需要一个,请使用required_without_all:foo,bar,...