当一个字段的值决定另一个字段的有效性时,如何进行 Laravel 表单验证
How do I do Laravel form validation when value of one field decides validity of the other field
我有一个表格。类型字段是一个下拉列表,只有两个可能的值。第二个字段是 bcode。
例如。
如果 table 有这样的数据-
ID TYPE BCODE
1 1 2
2 1 3
3 2 2
4 1 4
5 2 2
现在我正在制作一个弹出表单以在此 table 中插入记录。因此,如果输入类型 1 并且输入 bcode 2,3 或 4,它已经在 table 中,因此它将无效,但任何其他数值都将有效。同样,如果输入类型 2,则 bcode 只能是 2,3 或 4。所有其他值都将无效。
我在这里阅读了 Laravel 文档-
https://laravel.com/docs/6.x/validation#custom-validation-rules
但是什么也没找到。
有人试过类似的东西吗?
假设您的 table 结构与您的示例中的结构相同,并且其名称为 type_bcode
,我提供以下解决方案:
通过 运行 php artisan make:rule TypeBcode
创建自定义规则
它应该是这样的:
private $type;
public function __construct($type)
{
$this->type = $type;
}
public function passes($attribute, $value)
{
$type_bcode = DB::table('type_bcode')
->where('type', $this->type)
->get()
->pluck('bcode')
->toArray();
return in_array($value, $type_bcode);
}
public function message()
{
return 'The validation error message.';
}
在您的控制器存储功能中执行此操作:
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'type' => 'required',
'bcode' => ['required', new TypeBcode($request->type)],
]);
if ($validator->fails()) {
//some action
}
//some action
}
希望这会有所帮助
我有一个表格。类型字段是一个下拉列表,只有两个可能的值。第二个字段是 bcode。
例如。
如果 table 有这样的数据-
ID TYPE BCODE
1 1 2
2 1 3
3 2 2
4 1 4
5 2 2
现在我正在制作一个弹出表单以在此 table 中插入记录。因此,如果输入类型 1 并且输入 bcode 2,3 或 4,它已经在 table 中,因此它将无效,但任何其他数值都将有效。同样,如果输入类型 2,则 bcode 只能是 2,3 或 4。所有其他值都将无效。
我在这里阅读了 Laravel 文档-
https://laravel.com/docs/6.x/validation#custom-validation-rules
但是什么也没找到。
有人试过类似的东西吗?
假设您的 table 结构与您的示例中的结构相同,并且其名称为 type_bcode
,我提供以下解决方案:
通过 运行
php artisan make:rule TypeBcode
创建自定义规则 它应该是这样的:private $type; public function __construct($type) { $this->type = $type; } public function passes($attribute, $value) { $type_bcode = DB::table('type_bcode') ->where('type', $this->type) ->get() ->pluck('bcode') ->toArray(); return in_array($value, $type_bcode); } public function message() { return 'The validation error message.'; }
在您的控制器存储功能中执行此操作:
public function store(Request $request) { $validator = Validator::make($request->all(), [ 'type' => 'required', 'bcode' => ['required', new TypeBcode($request->type)], ]); if ($validator->fails()) { //some action } //some action }
希望这会有所帮助