使用通配符的Laravel自定义验证属性名称

时间:2019-01-09 00:23:02

标签: php laravel validation laravel-5 wildcard

自定义Laravel 5.7验证属性时,是否可以在属性名称中包含通配符?我无法在此处确定指示通配符的正确方法。

我有一个联系人页面,其中列出了特定联系人的详细信息,包括他们的所有电话号码和电子邮件。在此页面上,您可以编辑其中的每个,并添加新的。因此,我使用了一个foreach语句来显示所有这些内容,并将其ID号包含在表单字段名称中,即:

  • phone_areacode _ {{$ number-> id}}
  • phone_number _ {{$ number-> id}}
  • phone_extension _ {{$ number-> id}}

这使它们的名称唯一,这意味着当验证失败时,我只能显示与特定号码或正在编辑的电子邮件相关的错误消息。但是,显示的错误消息中包含该数字,因此我得到诸如“电话区号10格式无效”之类的信息。或“电话号码27不能超过20个字符。”

在验证语言文件中定义通配符时,是否可以在属性名称中使用通配符?基本上,我希望能够做到这一点:

'attributes' => [
  'phone_areacode_*.*' => 'phone areacode',
],

如果没有,如何在控制器的@update方法中定义属性名称?

2 个答案:

答案 0 :(得分:1)

使用数组/对象发布值,并使用点符号指定验证规则/ lang:

示例POST数据:

{
  "phone": {
    "ID1234": {
      "areacode": "123",
      "number": "1231234",
      "extension": "1"
    }
  }
}

示例HTML表单(相当于上面的POST数据):

<form action="?" method="post">
  <input name="phone[ID1234][areacode]" />
  <input name="phone[ID1234][number]" />
  <input name="phone[ID1234][extension]" />

  <input type="submit">Submit</input>
</form>

验证示例:

$validator = Validator::make($request->all(), [
  'phone.*.areacode': 'required',
  'phone.*.number': 'required',
  'phone.*.extension': 'required',
]);

示例lang文件:

return [
  'attributes' => [
    'phone.*.areacode': 'phone area code',
    'phone.*.number': 'phone number',
    'phone.*.extension': 'phone extension',
  ],
]);

答案 1 :(得分:-1)

您是否尝试过这种方式?它来自Laravel文档

'custom' => [
        'attribute-name' => [
            'rule-name' => 'custom-message',
        ],
    ],