49

Когда я хочу, чтобы зарегистрировать пользователя в моем Laravel проекта, страница всегда говоритНеопределенная переменная: ошибки в Laravel

Undefined variable: errors (View: /var/www/resources/views/auth/register.blade.php)"

Согласно документации Laravel, $errors всегда должен автоматически устанавливаться:

So, it is important to note that an $errors variable will always be available in all of your views on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used.

я это на на каждом представлении, когда я использую:

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

или любым другим способом когда я хочу использовать переменную $errors.

Почему это? Раньше у меня никогда не было этой проблемы.

Может кто-нибудь помочь мне, пожалуйста?

+0

Какая версия Laravel? В частности, в вашем файле 'composer.lock', какую версию он вытягивает? –

+0

«версия»: «v5.2.3» – Anhinga

+0

Интересно. Я еще не испортил 5.2, но я могу четко видеть в документации то, что вы говорите. Может быть ошибка в 5.2? https://laravel.com/docs/5.2/validation –

ответ

82

Вы должны убедиться, что в app/Http/Kernel.php в middlewareGroups недвижимости для web у вас есть:

\Illuminate\View\Middleware\ShareErrorsFromSession::class, 

в этом массиве. Сравните это с https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php

EDIT

Кажется, вам нужно добавить 'middleware' => 'web' для маршрута вы используете или положить \Illuminate\View\Middleware\ShareErrorsFromSession::class, в $middleware собственность массива

или

Внутри маршрутов. php попытайтесь создать свои маршруты в следующем блоке

Route::group(['middleware' => ['web']], function() { 
    //routes here 
}); 

UPDATE новых версий Laravel ПРИМЕНЕНИЯ

Имейте в виду, что вы можете столкнуться с проблемами, и в случае, если вы используете web промежуточное программное обеспечение дважды. В приложении Laravel было внесено изменение 5.2.27 (не путайте его с базой Laravel, которую вы используете в данный момент - вы можете использовать рамку Laravel, например 5.2.31, но иметь приложение Laravel в версии 5.2.24), в котором web промежуточное программное обеспечение применяется автоматически для всех маршрутов. Поэтому в случае возникновения проблем вы должны открыть файл app/Providers/RouteServiceProvider.php и проверить его содержимое.

Вы можете сравнить это также здесь:

В случае, если у вас есть новая версия (которая применяется web промежуточное программное обеспечение автоматически), вы не должны используйте web промежуточное ПО в routes.php или вы должны изменить свой RouteServiceProvider способ не применять web группа middleware.В противном случае, если в этом провайдере будет применяться web группа промежуточного программного обеспечения, и вы используете ее также в routes.php, вы можете получить очень неожиданные результаты.

+0

Это уже там ... Скопируйте весь блок, чтобы убедиться, но он все еще не работает. – Anhinga

+0

Вы обновили приложение из более раннего выпуска Laravel или начали новое приложение с нуля в Laravel 5.2? –

+0

Начато с нуля через scotchbox – Anhinga

0

count не является реально осуществимым, так как предполагается, что переменная уже существует. изменить проверку условий к: @if($errors->has()) или просто @if($errors)

Кроме того, если вы перенаправлять убедитесь, чтобы использовать это в вашем контроллере

return redirect()->back()->with('errors', $validator->messages()); 

EDIT: видели теперь, когда вы используете L5.2 Это может ответить на ваш вопрос - вам нужно поместить свои маршруты в группу маршрутов.

Laravel 5.2 validation errors

+0

ваши предложения также предполагают, что переменная существует ... –

+0

Нет, она проверяет наличие EDIT: если вы говорите о моем предложении контроллера, эта часть если, например, проверка не выполняется. – Vojko

+0

не очень ... где он проверяет наличие? $ errors-> has()? предполагает, что существуют переменные $ errors –

19

У меня был тот же вопрос с Laravel 5.2.x.

Внутри файла routes.php попробовать лет создать маршруты в заявлении

Route::group(['middleware' => ['web']], function() { 
    //routes here 
} 

.

+1

Да, это была та же проблема со мной. Я создал домашний ('/') маршрут за пределами промежуточного ПО 'web' – gthuo

2

Я тоже видел эту ошибку, и позже понял, что использовал свойство WithoutMiddleware как средство обхода аутентификации для данного конкретного теста, но в итоге он также удалил привязку ошибки проверки. Поэтому мне пришлось перестать использовать эту черту, чтобы сохранить взгляды.

+0

Спасибо, это тоже моя проблема. Вы нашли решение для тестирования материалов, которое имеет как переменную ошибки, так и потребность в 'WithoutMiddleware'? – Fanmade

+1

@Fanmade К сожалению, я этого не сделал. В моих тестах я только что создал пользователя и зарегистрировал их для каждого теста. К счастью, laravel делает это возможным с очень маленьким кодом, поэтому я не против. – Nikush

3

У меня была аналогичная проблема, и решить этот путем добавления маршрутов в массив промежуточного имущества, а также,

НО

он работал только после вызова php artisan route:cache (очистка кэша маршрутов) впоследствии.

Я надеюсь, что некоторые из вас посчитают это полезным.

+0

Что? Кэш необходимо очистить, чтобы промежуточное ПО работало хорошо. – Tom11

+0

Извините, я не знаю, что я там думал. – xdhmoore

0
protected $middleware = [    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Social\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \Social\Http\Middleware\VerifyCsrfToken::class, 
]; 

/** 
* The application's route middleware groups. 
* 
* @var array 
*/ 
protected $middlewareGroups = [ 
    'web' => [ 

    ], 

    'api' => [ 
     'throttle:60,1', 
    ], 
]; 

/** 
* The application's route middleware. 
* 
* These middleware may be assigned to groups or used individually. 

сделать ваши ядра выглядеть следующим образом

2

Кроме того, чтобы быть в курсе: Если вы пишете тесты и ваше мнение имеет $ ошибки переменной убедитесь, что вы не используйте Без знака.

+1

Большое вам спасибо за это! Сэкономил мне тонну хлопот – Kingsley

Смежные вопросы