我在我的一个Laravel项目中使用表单请求验证,并希望验证country_id
,但仅当bak_leaflet
设置为0.在我的FormRequestFile
中,我有以下规则:
public function rules()
{
return [
...
'country_id' => 'required_if:bak_leaflet,0',
...
];
}
这非常正常,但当bak_leaflet
为0
时,country_id
也需要大于1:
public function rules()
{
return [
...
'country_id' => 'required_if:bak_leaflet,0|min:1',
...
];
}
但是,min:1
规则会被完全忽略。我怎样才能确保验证工作方式符合我的要求?
答案 0 :(得分:3)
您可以在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;
});
然后像这样编写验证规则:
'country_id' => 'required_if:bak_leaflet,0|min_if:bak_leaflet,0,1',
此外,您还需要添加
'min_if' => 'Your validation message',
进入 resources / lang / en / validation.php 或传递给 $ this-&gt; validate()作为第三个参数
答案 1 :(得分:1)
我已经使用了@ avik-aghajanyan的答案,并将该方法添加到我的表单请求文件中,如下所示:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Factory as ValidationFactory;
class StoreArticle extends FormRequest
{
public function __construct(ValidationFactory $validationFactory)
{
$validationFactory->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;
});
}
....