Неопределенная переменная: ошибки в 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
редактировать
кажется, вам нужно добавить '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
middleware применяется автоматически для всех маршрутов. Так что в случае возникновения проблем, вы должны открыть свой app/Providers/RouteServiceProvider.php
file и проверьте его содержимое.
вы можете сравнить его также здесь:
в случае, если у вас есть более новая версия (это применимо web
middleware автоматически), вы не должны использовать web
middleware в routes.php
больше или вы должны изменить свой RouteServiceProvider
метод не распространяется web
группа промежуточного. Иначе если web
middleware group автоматически применяется в этом провайдере, и вы также используете его в routes.php
вы можете получить весьма неожиданные результаты.
у меня была такая же проблема с Laravel 5.2.х.
внутри 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, используя
предназначенных(состав e_all ^ E_NOTICE);
Подробнее:http://php.net/manual/en/function.error-reporting.php
надеюсь, что это поможет вам, спасибо