Undefined переменная: ошибки в Laravel
Когда я хочу зарегистрировать пользователя в моем проекте laravel, страница всегда говорит
Undefined variable: errors (View:/var/www/resources/views/auth/register.blade.php) "
Согласно документации Laravel, $errors
всегда должен быть автоматически установлен:
Итак, важно отметить, что переменная $errors всегда будет доступна во всех ваших представлениях по каждому запросу, что позволит вам удобно предположить, что переменная $errors всегда определена и может быть безопасно использована.
У меня есть это на каждом представлении, когда я использую:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
или любым другим способом, когда я хочу использовать переменную $errors
.
Почему это? Раньше у меня не было этой проблемы.
Кто-нибудь может мне помочь?
Ответы
Ответ 1
Вы должны убедиться, что в app/Http/Kernel.php
в middlewareGroups
для web
у вас есть:
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
в этом массиве. Сравните это с https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php
ИЗМЕНИТЬ
Кажется, вам нужно добавить 'middleware' => 'web'
для используемого вами маршрута или поместить \Illuminate\View\Middleware\ShareErrorsFromSession::class,
в массив свойств $middleware
или
Внутри файла routes.php попытайтесь создать свои маршруты в следующем блоке
Route::group(['middleware' => ['web']], function () {
//routes here
});
ОБНОВЛЕНИЕ ДЛЯ НОВЫХ ВЕРСИЙ ПРИМЕНЕНИЯ LARAVEL
Помните, что вы можете столкнуться с проблемами и в случае, если вы дважды используете промежуточное ПО web
. Было внесено изменение в приложение Laravel 5.2.27 (не путайте его с базой Laravel, которую вы используете в данный момент - вы можете использовать Laravel framework, например 5.2.31, но иметь приложение Laravel в версии 5.2. 24), в котором web
промежуточное программное обеспечение применяется автоматически для всех маршрутов. Поэтому в случае возникновения проблем вы должны открыть файл app/Providers/RouteServiceProvider.php
и проверить его содержимое.
Вы можете сравнить его и здесь:
В случае, если у вас есть более новая версия (которая применяет связующее ПО web
автоматически), вам больше не следует использовать web
промежуточное ПО в routes.php
, или вы должны изменить свой метод RouteServiceProvider
, чтобы не применять групповое промежуточное ПО web
, В противном случае, если в этом провайдере автоматически применяется группа промежуточного программного обеспечения web
, и вы используете ее также в routes.php
, вы можете получить очень неожиданные результаты.
Ответ 2
У меня была такая же проблема с Laravel 5.2.x.
Внутри файла routes.php
попробуйте создать маршруты в
Route::group(['middleware' => ['web']], function () {
//routes here
}
утверждение.
Ответ 3
У меня была аналогичная проблема, и я решил эту проблему, добавив маршруты в массив свойств промежуточного ПО,
НО
он работал только после вызова php artisan route:cache
(очистка кэша маршрутов) впоследствии.
Я надеюсь, что некоторые из вас найдут это полезным.
Ответ 4
Я тоже видел эту ошибку, и позже понял, что использовал признак WithoutMiddleware
как средство обхода аутентификации для этого конкретного теста, но в итоге он также удалил привязку ошибок проверки. Поэтому мне пришлось прекратить использовать эту черту, чтобы сохранить взгляды.
Ответ 5
Перейдите в файл App\Http\Kernel.php. Переместите все свойства $middlewareGroups
на $middleware
.
Проверить дополнительную информацию -
http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
Ответ 6
Также помните: если вы пишете тесты, а ваша переменная имеет $errors, убедитесь, что вы не используете черту Без магии.
Ответ 7
count не является реально выполнимым, так как предполагается, что переменная уже существует. измените проверку состояния на: @if($errors->has())
или просто @if($errors)
Также, если вы перенаправляете, обязательно используйте это в своем контроллере
return redirect()->back()->with('errors', $validator->messages());
EDIT: теперь вы видите, что используете L5.2
Это может ответить на ваш вопрос - вам нужно разместить свои маршруты в группе маршрутов.
Ошибки проверки Laravel 5.2
Ответ 8
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 route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
],
'api' => [
'throttle:60,1',
],
];
/**
* The application route middleware.
*
* These middleware may be assigned to groups or used individually.
сделайте ваше ядро похожим на это