Неопределенная переменная: ошибки в 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 56

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 Это может ответить на ваш вопрос - вам нужно поместить свои маршруты в группу маршрутов.

ошибки проверки 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 с помощью

error_reporting(E_ALL ^ E_NOTICE);

подробнее:http://php.net/manual/en/function.error-reporting.php

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