Неопределенная переменная: ошибки в 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 Это может ответить на ваш вопрос - вам нужно поместить свои маршруты в группу маршрутов.

Laravel 5.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

надеюсь, что это поможет вам, спасибо