【问题标题】:How do I do Laravel form validation when value of one field decides validity of the other field当一个字段的值决定另一个字段的有效性时,我如何进行 Laravel 表单验证
【发布时间】:2020-11-06 00:26:06
【问题描述】:

我有一个表格。类型字段是一个下拉列表,只有两个可能的值。第二个字段是 bcode。
例如。 如果表有类似的数据-

ID  TYPE  BCODE
1     1     2
2     1     3
3     2     2
4     1     4
5     2     2

现在我正在制作一个弹出表单以在此表中插入记录。因此,如果输入类型 1 并输入 bcode 2,3 或 4,则它已经在表中,因此它将无效,但任何其他数值都是有效的。同样,如果输入类型 2,则 bcode 不能是 2,3 或 4 以外的任何值。所有其他值都将无效。

我在这里阅读了 Laravel 文档-
https://laravel.com/docs/6.x/validation#custom-validation-rules
但是什么也没找到。
有人试过类似的吗?

【问题讨论】:

  • 我不明白你的问题
  • 您似乎正在尝试制定自定义验证规则。你走了多远? php artisan help make:rule 将帮助您了解如何为此使用内置生成器。这将在 app/Rules 文件夹中放置一个新的规则类,您可以在其中实现所需的内容。

标签: php laravel validation laravel-6


【解决方案1】:

假设您的表结构与您的示例中的类似,并且称为 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
    }
    

希望这会有所帮助

【讨论】:

  • 不完全是我所期望的,但逻辑是正确的。我按照下面的方式做了并且它起作用了-$typeset = array_unique(DB::table('type_bcode')->get()->pluck( 'bcode')->toArray()); if($this->type == 1 && in_array($value, $typeset)){ return false; } elseif($this->type == 2) { return in_array($value, $typeset); } 其他{ 返回​​真;只有我无法开始工作的是具有不同的唯一值。这就是我使用 array_unique 函数的原因。如果您有更好的方法,请提出建议。谢谢您的帮助。
  • 验证器端代码几乎相同,因此未包含在我的评论中。
猜你喜欢
  • 2021-09-14
  • 2018-09-04
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
相关资源
最近更新 更多