Может кто-нибудь объяснить мне, почему иногда мне нужно использовать $errors->all(), а иногда нет?
Пытаюсь найти уникальное решение для массива ошибок и ошибок объекта $.
// View 1
@if (count($errors) > 0)
@foreach($errors as $error)
{{ $error }}<br>
@endforeach
@endif
// View 2 that sometimes it crashes with:
// "Call to a member function all() on array"
@if (count($errors) > 0)
@foreach($errors->all() as $error)
{{ $error }}<br>
@endforeach
@endif
Вы должны вручную передавать ошибки где-то либо с помощью with('errors', [...]) в ответе представления, либо вручную устанавливая ошибки в сеансе с помощью session([ 'errors' => [...]), вам необходимо убедиться, что вы всегда используете withErrors([..]) либо в ответе представления, либо в ответе перенаправления, чтобы правильно установить неверное сообщение об ошибке.
Какую версию Laravel вы используете? Кроме того, есть ли что-то другое в методах контроллера с тем, как вы обрабатываете проверку?
5.6 @RossWilson, и я ничего не делаю на контроллере.






Я не особо много занимаюсь laravel, но предполагаю, что вы всегда можете сделать что-то вроде этого:
@if (count($errors) > 0)
@if (is_array($errors))
@foreach($errors as $error)
// code
@endforeach
@elseif (is_object($errors))
@foreach($errors->all() as $error)
//code
@endforeach
@endif
@endif
$errors->all(), если вы проверяете данные через Validator или в классе Request. См. Этот часть документации. Laravel использует переменную $errors как класс MessageBag.
$errors как array, используя if в контроллере, вы возвращаете что-то вроде этого:
return back()->withErrors([
'field1' => 'Error in the field 1'
]);
В этом случае Laravel использует переменную $errors как array.
Я использую запросы без перенаправления.
Может быть, вы иногда вручную передаете ошибки своему представлению? Например:
return view('...')->withErrors(['Your errors']);