php 如何自定义Laravel验证消息属性?

vktxenjb  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(140)

我正在使用laravel,并且希望自定义在出现验证错误时返回的消息属性。

{
    "message": "The title field is required. (and 1 more error)",
    "errors": {
        "title": [
            "The title field is required."
        ],
        "slug": [
            "The slug field is required."
        ]
    }
}

请注意,我不是在谈论定制单个错误消息,我指的是定制返回的消息属性,该属性列出了第一个错误以及还有多少个其他错误。

lyr7nygr

lyr7nygr1#

Laravel使用的所有错误信息都来自lang/en/validation.php文件。当然,如果没有使用其他语言。这个文件是一个键值对,基于验证规则失败,它识别键并获得消息。如果您想自定义消息,只需更改该特定键的值,当验证错误发生时,相同的消息将显示在您的视图。如果你愿意,你可以创建新的规则,并为这些规则添加自定义消息。Laravel如何进行验证的方法描述起来有点长,但在最后有一个Illuminate\Support\MessageBag.php对象在你的视图上可用,你可以用它来访问所有的错误。这个对象引用是$errors。如果你想知道更多你可以用这个对象做什么,检查它提供的所有方法:https://laravel.com/api/9.x/Illuminate/Support/MessageBag.html。对于一个输入字段,通常需要满足多个规则。当然,下面的规则对于电话号码来说不够好,但对于我想要显示的内容来说却很好:

$request->validate([
   'numeric', 
   'min:10'
]);

输入如下:“abc”在两种情况下都将失败,不是数字,只有三个字符,至少10个。在这种情况下,将数字作为密钥的MessageBag将有两个不同的错误。当你想显示时,你可以选择你喜欢的一个。但大多数时候,这并不重要,所以你会选择第一个。这就是$errors->first('number');的原因。
有不同的方法可以得到这些错误,但我不知道你是否可以修改$errors属性。你可以合并其他错误,但改变现有错误的值不确定你是否可以这样做。然而,如果你真的需要这样做,考虑这样做:

@if($errors->has('number'))    
   @foreach($errors->get('number') as $numberErrors)
      @if($numberErrors === "**Exact error message**."))
         <span>Custom error.</span>
      @else
         <span>{{$numberError}}</span>
      @endif    
   @endforeach 
@endif

相关问题