Laravel Как поместить пользовательское сообщение проверки в пакет проверки? - PullRequest
0 голосов
/ 06 сентября 2018

Как поместить сообщение об ошибке из внешнего валидатора в пакет сообщений? Дело в том, что я получаю ответ об ошибке от валидатора из моего API, я получаю сообщение об ошибке, которое я хотел бы отправить существующему валидатору на моей странице.

Итак, у меня есть форма, которая проверяется с помощью средства проверки laravel на моей странице и средства проверки API.

То, что я пробовал, было:

dd(ValidationException::withMessages([ 'email' => $errors->email, ]));, где $errors->email - просто сообщение об ошибке. Но он работает не так, как если бы он был проверен внутри локального проекта, сообщения проверки не переведены и т. Д. ...

Также я попробовал

throw ValidationException::withMessages([
      $validator->errors()->add('email', $errors->email[0])
]);

Где это приблизилось к решению: В ValidationException у меня есть экземпляр исключения, но свойство сообщения слишком вложенное:

{

"validator": {
     "messages": {
         "0" => [
             0 => MessageBag(2)
          ]
      }
   }
}

Сообщения слишком вложенные и все еще не ведут себя так же, как локальные.

Если я не достаточно ясен, я могу дать дополнительное объяснение.

EDIT:

Чтобы получить ошибки из API, который я использую:

$errors = $response->getErrors()->email;, что дает мне:

array:1 [▼
  0 => {#784 ▼
    +"code": 42252
    +"message": "The email has already been taken."
  }
] 

поэтому я не могу использовать $response->getErrors()->email->first()

Ответы [ 4 ]

0 голосов
/ 06 сентября 2018

используйте таким образом.

    throw  \Illuminate\Validation\ValidationException::withMessages([
         'email' => 'Your validation message'
   ]);
0 голосов
/ 06 сентября 2018

Лучше всего использовать Проверка запроса формы

Документация

Например:

class UpdateName extends BaseRequest {

    public function rules()
    {
        return [
            'name' => 'required',
        ];
    }

    public function messages()
    {
        return [
        'name.required' => 'Your name is required or any custom msg',
        ];
    }
}
0 голосов
/ 06 сентября 2018

Попробуйте создать свой собственный валидатор запроса с помощью $ php artisan make:request MyNewRequestName

class MyNewRequestName extends BaseRequest {

    public function rules()
    {
        return [
            'input_field' => 'required|integer',
        ];
    }

    public function messages()
    {
        return [
            'input_field.required' => 'This field is required',
            'input_field.integer'  => 'This field must contain integers only',
        ];
    }
}

А потом, в вашем контроллере:

public function update( MyNewRequestName $request )
{
    //... another code here
}
0 голосов
/ 06 сентября 2018

Попробуйте сначала установить ошибку:

ValidationException::withMessages([
    "email" => $errors->email->first()
]);

Однако меня больше интересует, как вы решите отобразить ошибку.

Помните, что не используйте ключевые средства доступа в Laravel для доступа к объектам в коллекциях и не конвертируйте их в массивы. Методы Eloquent и Collection практически повсеместно доступны практически для любого объекта коллекции посредством наследования фасадов и очень полезны.

https://laravel.com/docs/5.6/validation#customizing-the-error-messages

Редактировать: Также, возможно, найдите и перечитайте раздел «Именованные пакеты ошибок» на этой странице и раздел «Пользовательские сообщения об ошибках». Они могут предоставить вам триггер, чтобы найти ваше решение, если мое не приблизит вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...