web-dev-qa-db-ja.com

未定義変数:Laravelのエラー

laravelプロジェクトにユーザーを登録する場合、ページには常に

未定義の変数:エラー(表示:/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変数を使用する場合のその他の方法。

どうしてこれなの?以前にこの問題は一度もなかった。

誰かが私を助けてくれますか?

62
Anhinga

middlewareGroupswebプロパティのapp/Http/Kernel.phpで次のことを確認する必要があります。

\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ミドルウェアを2回使用する場合にも、問題が発生する可能性があることに注意してください。 Laravelアプリケーション5.2.27に変更がありました(Laravelフレームワークと混同しないでください)現時点で使用-たとえば、5.2.31の場合はLaravelフレームワークを使用できますが、webミドルウェアがすべてに自動的に適用されるバージョン5.2.24のLaravelアプリケーションがありますルート。そのため、問題が発生した場合は、app/Providers/RouteServiceProvider.phpファイルを開いてその内容を確認する必要があります。

ここでも比較できます:

新しいバージョン(webミドルウェアを自動的に適用する)がある場合は、routes.phpwebミドルウェアを使用しないでください。または、RouteServiceProviderメソッドを変更して適用しないでください。 webグループミドルウェア。そうでない場合、webミドルウェアグループがこのプロバイダーに自動的に適用され、routes.phpでも使用すると、非常に予期しない結果が生じる可能性があります。

110

Laravel 5.2.xでも同じ問題が発生しました。

routes.phpファイルの内部でルートを作成してみてください

Route::group(['middleware' => ['web']], function () {
    //routes here
}

ステートメント。

19
Felipe Peña

また、次の点に注意してください。テストとビューを記述する場合has $ errors変数は、WithoutMiddleware traitを使用しないでください。

3

同様の問題があり、ミドルウェアプロパティ配列にもルートを追加することでこの問題を解決しました。

しかし

その後php artisan route:cache(ルートキャッシュのクリア)を呼び出した後にのみ機能しました。

皆さんの何人かがこれが役に立つことを願っています。

3
Tom11

私もこのエラーを見て、後でこの特定のテストの認証をバイパスする手段としてWithoutMiddleware特性を使用したことに気付きましたが、検証エラーバインディングも削除されてしまいました。そのため、ビューを機能させるには、特性の使用を停止する必要がありました。

2
Nikush

App\Http\Kernel.phpファイルに移動します。 $middlewareGroupsプロパティのすべてのものを$middlewareに移動します。

詳細を確認してください- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/

2
tisuchi

countは、変数がすでに存在することを前提としているため、実際には現実的ではありません。条件チェックを@if($errors->has())または単に@if($errors)に変更します

また、リダイレクトする場合は、必ずコントローラーでこれを使用してください

return redirect()->back()->with('errors', $validator->messages());

編集:L5.2を使用していることがわかりました。これはあなたの質問に答えるかもしれません。ルートをルートグループに入れる必要があります。

Laravel 5.2検証エラー

1
Vojko

この方法を使用すると、問題が修正されます。

Route::group(['middleware' => ['web']], function () {
        //routes should go here
});

それでも解決しない場合は、上記のコードに加えて次の職人コマンドを実行してください。

php artisan key:generate

5.2。*を使用しながらこの方法で解決しました。

0
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.

カーネルを次のようにします

0
Amit Rai