当一个字段的值决定另一个字段的有效性时,如何进行 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,我提供以下解决方案:

  1. 通过 运行 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.';
    }
    
  2. 在您的控制器存储功能中执行此操作:

    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
    }
    

希望这会有所帮助