Laravel, лови ошибку после валидации - PullRequest
1 голос
/ 16 октября 2019

Laravel 5.1 У меня есть этот код:

$validator = Validator::make($request->all(), [
    'name' => 'required|max:255',
    'file' => 'required|max:2000',
]);
if ($validator->fails()) {
    // do something depending the error before returning and redirect
    if (name not present) {
      my code for this
    }

    if (file larger than 2000) {
      my code for this
    }

    return redirect()
    ->back()
    ->withErrors($validator)
    ->withInput();
}

Итак, если name отсутствует, мне нужно запустить какой-то код, а если file больше 2000, другойи т. д.

Как узнать, какое правило не сработало?

1 Ответ

3 голосов
/ 16 октября 2019

Довольно просто на самом деле. Точно так же, как $errors глобально передается во внешний интерфейс и имеет метод has(), вы можете проверить ошибку в Controller перед перенаправлением:

$validator = Validator::make($request->all(), [
  'name' => 'required|max:255',
  'file' => 'required|max:2000',
]);
if ($validator->fails()) {
  // do something depending the error before returning and redirect
  if($validator->errors()->has('name')){
    // Do whatever for `name` issue.
  }

  if($validator->errors()->has('file')){
    // Do whatever for `file` issue.
  }

  return back()
  ->withErrors($validator)
  ->withInput(); // Don't need `redirect()->back()`, `back()` is enough.
}

Обратите внимание, это перехватитоба правила required и max. Чтобы проверить отдельные правила, вы можете использовать метод failed() в сочетании с isset():

if ($validator->fails()) {
  $failedValidation = $validator->failed();
  if(isset($failedValidation['name']['Max'])){
    ...
  }

  if(isset($failedValidation['file']['Max'])){
    ...
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...