【问题标题】:Laravel array validation if atleast one fails return single message如果至少一个失败,则 Laravel 数组验证返回单个消息
【发布时间】:2016-06-30 03:06:43
【问题描述】:

我有一个表格,最多可以添加 30 个选项字段(选项 [1]、选项 [2]、...),现在我使用 'option.*' => 'required' 请求验证中的规则,但是有一个小问题,如果您提交所有选项字段为空的表单,它会显示需要每个选项字段的长错误消息,但我需要它只为所有选项显示一条消息,例如:“每个选项字段都是必需的”。

任何想法如何制作它? 谢谢!

【问题讨论】:

  • 为此字段设置自定义消息?
  • 您的意思是每个选择字段都是必需的?您只有一个选择,包含 30 个选项还是 30 个选择字段?
  • 它们不是选择,而是文本输入(最多可添加 30 个),所有这些都是必需的,但我只需要返回一条消息,而不是 30 倍相同的消息。

标签: arrays forms validation laravel


【解决方案1】:

我找到了解决方案。如果有人需要,我会在这里发布:

基本上,您需要在请求验证类中覆盖formatErrors 方法

protected function formatErrors(Validator $validator)
{
    $errors = parent::formatErrors($validator);

    // this will remove the keys that have index larger than 0
    $keys = array_filter(array_keys($errors), function($item) {
        $parts = explode('.', $item);

        // you might want to modify this to match your fields, 
        // I had another level of keys
        if (count($parts) === 3 and is_numeric($parts[1]) and (int)$parts[1] > 0) {
            return false;
        }

        return true;
    });

    $errors = array_intersect_key($errors, array_flip($keys));

    return $errors;
}

【讨论】:

  • 你能解释一下如何在请求验证类中使用上述方法吗?
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2017-06-02
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多