Неопределенная переменная: ошибки в Laravel
когда я хочу зарегистрировать пользователя в моем проекте laravel, страница всегда говорит
неопределенная переменная: ошибки (View:/var/www/resources/views/auth / register.лезвие.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
переменной.
почему это? У меня никогда не было этой проблемы раньше.
может кто-нибудь помочь мне, пожалуйста?
10 ответов:
вы должны убедиться, что в
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 });
ОБНОВЛЕНИЕ ДЛЯ БОЛЕЕ НОВЫХ ВЕРСИЙ ПРИЛОЖЕНИЯ LARAVEL
имейте в виду, что вы можете столкнуться с проблемами также в случае использования
web
middleware дважды. Произошло изменение в приложении Laravel 5.2.27 (не путайте его с Laravel framework, который вы используете в данный момент - Вы можете использовать Laravel framework, например 5.2.31, но иметь приложение Laravel в версии 5.2.24), в которомweb
промежуточное программное обеспечение применяется автоматически для всех маршрутов. Так что в случае проблем, вы должны открыть свойapp/Providers/RouteServiceProvider.php
файл и проверьте его содержимое.вы можете сравнить его также здесь:
в случае, если у вас есть более новая версия (это относится
web
middleware автоматически), вы не должны использоватьweb
middleware вroutes.php
больше или вы должны изменить свойRouteServiceProvider
метод не распространяетсяweb
группа промежуточного. В противном случае, еслиweb
middleware group автоматически применяется в этом провайдере, и вы используете его также вroutes.php
вы можете получить весьма неожиданные результаты.
у меня была такая же проблема с Laravel 5.2.x.
внутри
routes.php
файл попробуйте йо создать свои маршруты в пределахRoute::group(['middleware' => ['web']], function () { //routes here }
заявление.
У меня была аналогичная проблема, и я решил ее, добавив маршруты в массив свойств middleware,
но
он работал только после вызова
php artisan route:cache
(очистка кэша маршрута) впоследствии.Я надеюсь, что некоторые из вас найдут это полезным.
Я тоже видел эту ошибку и позже понял, что использовал
WithoutMiddleware
признак как средство обхода аутентификации для этого конкретного теста, но в итоге он также удалил привязку ошибки проверки. Поэтому мне пришлось прекратить использовать эту черту, чтобы сохранить рабочие взгляды.
на App\Http\Kernel.php. Переместить все вещи
$middlewareGroups
свойства$middleware
.регистрация для получения более подробной информации- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
также быть в курсе: если вы пишете тесты и ваш взгляд и $errors переменная убедитесь, что вы не используете WithoutMiddleware черта.
count не является реально реализуемым, поскольку он предполагает, что переменная уже существует. измените проверку состояния на:
@if($errors->has())
или просто@if($errors)
кроме того, если вы перенаправляете убедитесь, что использовать это в контроллере
return redirect()->back()->with('errors', $validator->messages());
EDIT: теперь видно, что вы используете L5. 2 Это может ответить на ваш вопрос - вам нужно поместить свои маршруты в группу маршрутов.
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.
сделайте так, чтобы ваше ядро выглядело
ваша проблема будет решена с помощью этого метода.
Route::group(['middleware' => ['web']], function () { //routes should go here });
Если это не поможет вам, просто запустите следующую команду artisan в дополнение к приведенному выше коду:
php artisan key:generate
Я решил таким образом при использовании 5.2.*
на самом деле это была не ошибка, а предупреждение, которое вы можете удалить с помощью функции php error_reporting ()
Я удалил предупреждение в моем laravel 5.6 с помощью
error_reporting(E_ALL ^ E_NOTICE);
подробнее:http://php.net/manual/en/function.error-reporting.php
надеюсь, что это поможет вам, спасибо