Laravel验证条件



我正在尝试验证我的字段。如果is_tacher为false,而teacher_id为空。然后我会抛出错误消息。但我不知道为什么即使is_tacher字段为true,它们也会提示此错误消息。假设is_tacher为true,则无需输入此条件。

if(is_bool($input['is_teacher']) == false && empty($input['teacher_id'])) {
$validator->errors()->add('teacher_id', 'Please select a teacher.');
return response()->json([
'error'    => true,
'messages' => $validator->errors(),
], 422);
}

is_bool检查变量是否为布尔值。变量必须是truefalse例如

$input=['is_teacher'=>true];
dd(is_bool($input['is_teacher']));

这将返回true;

$input=['is_teacher'=>12];
dd(is_bool($input['is_teacher']));

这将返回false。

如果你看到下面的函数,那么你可以看到is_bool到底会做什么

/**
* Finds out whether a variable is a boolean
* @link http://php.net/manual/en/function.is-bool.php
* @param mixed $var <p>
* The variable being evaluated.
* </p>
* @return bool true if var is a boolean,
* false otherwise.
* @since 4.0
* @since 5.0
*/
function is_bool ($var) {}

有关更多信息:https://www.php.net/manual/en/function.is-bool.php

更新

$input=[
'is_teacher'=>0,
'teacher_id'=>""
];
$validator = Validator::make($input, [
'teacher_id' => Rule::requiredIf(function () use ($input) {
return !$input['is_teacher'] && empty($input['teacher_id']);
}),
],[
'teacher_id.required'=>'Please select a teacher.'
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'messages' => $validator->errors(),
], 422);
}

你可以导入价值和规则如下

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

响应将是

{
"error": true,
"messages": {
"teacher_id": [
"Please select a teacher."
]
}
}

您可以将条件简化为以下内容:

// if `is_teacher` is false AND `teacher_id` is empty
if (!$input['is_teacher'] && !$input['teacher_id']) {
$validator->errors()->add('teacher_id', 'Please select a teacher.');
return response()->json([
'error'    => true,
'messages' => $validator->errors(),
], 422);
}

最新更新