Laravel验证取决于字段的值

问题描述 投票:0回答:1

假设我有一个带有一些值的组合框

<option value="0">All</option>
<option value="1">ABC</option>
<option value="2">PQR</option>
<option value="3">XYZ</option>

我的验证如下

'dept_id' => 'required|exists:department,id'

正如您所看到的,我希望dept_id字段是department表id列中存在的id,但我的第一个选项是“All”,其id在department表中显然不存在。

那么如果Laravel 5.6中的value = 0,我如何忽略存在规则呢?

php laravel laravel-5 laravel-validation
1个回答
2
投票

你有两种方法可以创建一个custom validation规则,

或者像这样的HTML

<option>All</option>
<option value="1">ABC</option>
<option value="2">PQR</option>
<option value="3">XYZ</option>

并删除required规则。

我推荐自定义验证规则方式,例如这样

$validator = Validator::make($request->all(), [
    'dept_id' => [
        'required',
        function($attribute, $value, $fail) {
            if ($value != '0') {
               // check the existence of $value in db 
               // if exists return true

            }
            // return error because it was neither found in db  nor its All
            return $fail($attribute.' is invalid.');
        },
    ],
]);

$validatior->validate();
© www.soinside.com 2019 - 2024. All rights reserved.