skip to Main Content

I have some validations in place,
and I am validating it like this:

validator make

and I noticed when there is more than 1 error,
laravel will add to the message "and 1(or 2 or 4..) more error(s)" ..

Take a look at the images and you will see what I mean:

validator message response

I found out where this is happening inside laravel framework / which function:

Validation Exception summarize function

it calls the Translater get method with a dynamic key!
How would I translate dynamic keys??

translator interface

I tried a few things:

  • Adding the key with the place holder in both English/Portuguese "validation" translation file
  • Add the key with the number itself (replaced placeholder)

none took effect, see what I mean below:

dynamic translation key with placeholder
translation key with replaced placeholder

I’ve noticed there are other people with the same issue when searching in google but so far I have not found a solution, I would like not to have to do a "string replace" and use a more elegant solution… Any one could help?

other people with the same issue:
https://github.com/laravel/framework/discussions/41230

Thanks alot

3

Answers


  1. Chosen as BEST ANSWER

    A quick fix / solution that works/worked for my case ( because I only need to display first error, one at a time, and not multiple )

    this will remove the extra (and 1 more error.. ):

    remove and 1 more error from laravel validation exception summarize

    In some cases you will also need to add the "bail" in the validation rules (to avoid more than 1 error per field)


  2. The (and :count more error) and (and :count more errors) need to be added to your json translation files as this is not a "short key" but a "translation string": https://laravel.com/docs/9.x/localization#using-translation-strings-as-keys

    Login or Signup to reply.
  3. Solution proposed by Dennis works, but if you are not interested in displaying the exact number of errors and you would like to replace the whole message with something more generic you can also consider to override the invalidJson() method in app/Exceptions/Handler.php:

    protected function invalidJson($request, ValidationException $exception)
    {
        return response()->json([
            'message' => __('Some of the fields are not valid'),
            'errors' => $exception->errors(),
        ], $exception->status);
    }
    

    This will work if you are working with API routes.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search