如何使所有validate()调用在控制器中执行?

时间:2018-03-17 03:21:52

标签: laravel debugging laravel-5

在控制器中我使用两个验证:

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 statementimg1,而img2可能不会同时出现。因为用户可能只想上传一个文件。

2 个答案:

答案 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,...