如何在laravel验证中转换嵌套属性?

llmtgqce  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(130)

我在laravel验证中转换嵌套属性时遇到了问题,我使用的代码如下:

$this->validate($request,[
'title.*' => 'required'
]);

和 * 可以是:en、es、fa...以及其他语言
这样做的原因是因为我们不知道网站中使用的确切语言,它可以从管理面板中更改,我们需要为每个语言添加例如产品的“标题”。

'title.en' => 'required'
'title.fa' => 'required'
'title.es' => 'required'

下面的哪些代码几乎可以实现相同的功能:

$this->validate($request, [
    'title.*' => 'required',
]);

这段代码一切正常,但问题在于转换这些字段。
验证消息如下所示:

"title.en is required."

但是我在validation.php上添加了en,fa..和每一个单独的语言,比如:

'attributes' => [
    'title' => 'TITLE', ###"TITLE" simply is for translation of title for other languages
    'en' => 'ENGLISH',
    'fa' => 'FARSI',
]

它没有显示这样的信息:

"TITLE ENGLISH is required."

也不可能这样写:

'attributes' => [
    'title.en' => 'ENGLISH TITLE',
    'title.fa' => 'FARSI TITLE',
]

我尝试在属性中使用数组,例如:

'attributes' => [
    'title' => 'TITLE',
    'title' => [
        'en' => 'English Title',
        'fa' => 'Farsi Title',
    ]
]

但这会导致错误,因为title定义了两次数组和字符串!!
如果有人能帮助我,我会很高兴的。
谢谢,英语不好意思:))

46qrfjad

46qrfjad1#

您可以通过在validation.php中添加attributes数组来更改验证消息的属性名称,如下所示

[
  //validation messages

  'attributes' => [
     'title.en' => 'Title in English'
  ],
]

消息应该是Title in English is required,而不是title.en is required.

相关问题