maz*_*dlx 0 validation laravel
我在我的 Laravel 项目之一中使用表单请求验证,并且想要验证country_id,但前提是bak_leafletist 设置为 0。在我的项目中,FormRequestFile我有以下规则:
public function rules()
{
return [
...
'country_id' => 'required_if:bak_leaflet,0',
...
];
}
Run Code Online (Sandbox Code Playgroud)
这绝对没问题,但是当bak_leafletis时0,thencountry_id也需要大于 1:
public function rules()
{
return [
...
'country_id' => 'required_if:bak_leaflet,0|min:1',
...
];
}
Run Code Online (Sandbox Code Playgroud)
然而,这条min:1规则被完全忽略了。如何确保验证按照我的需要进行?
您可以在 AppServiceProvider 的 boot() 方法中添加验证扩展程序,如下所示:
\Validator::extend('min_if', function ($attribute, $value, $parameters, $validator) {
$data = $validator->getData();
if (isset($data[$parameters[0]]) && $data[$parameters[0]] == $parameters[1] && (int)$value < $parameters[2]) {
return false;
}
return true;
});
Run Code Online (Sandbox Code Playgroud)
然后像这样编写验证规则:
'country_id' => 'required_if:bak_leaflet,0|min_if:bak_leaflet,0,1',
Run Code Online (Sandbox Code Playgroud)
此外,您还需要添加
'min_if' => 'Your validation message',
Run Code Online (Sandbox Code Playgroud)
进入resources/lang/en/validation.php或传递给你的$this->validate()作为第三个参数