我尝试使用条件设置验证规则但不知道如何执行以下操作:
在我的表单中,我有title_url(多语言版本的数组)。我想拥有唯一的title_url,但只有当表单中的module_cat_id与DB中的现有行具有相同的值时才会这样。
这是我的规则:
'title_url.*' => 'required|min:3|unique:modules_cat_lang,title_url'
任何想法如何解决这个问题?
答案 0 :(得分:1)
您可以定义类似于以下代码的自定义:
\Validator::extend('custom_validator', function ($attribute, $value, $parameters) {
foreach ($value as $v) {
$query = \DB::table('modules_cat_lang') // use model if you have
->where('title_url', $v)
->where('module_cat_id', \Input::get('module_cat_id'));
if ($query->exists()) {
return false;
}
}
});
'title_url.*' => 'required|min:3|custom_validator'
在此处阅读更多https://laravel.com/docs/5.3/validation#custom-validation-rules。
答案 1 :(得分:0)
如果您想将自己的自定义验证逻辑添加到现有的 Laravel 验证器中,那么您可以使用 after hooks
。请看下面的例子。
参考:https://laravel.com/docs/8.x/validation#adding-after-hooks-to-form-requests
示例 1(无参数)
$validator->after(function ($validator) {
if ('your condition') {
$validator->errors()->add('field', 'Something went wrong!');
}
});
Example 2(With Parameter) // 这里可以传入一个自定义参数($input)
$validator->after(function ($validator) use ($input) {
if ($input) {
$validator->errors()->add('field', 'Something went wrong!');
}
});