67

私の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または変数を使用したいときの他の方法。

どうしてこれなの?以前はこの問題はありませんでした。

誰か助けてくれませんか?

4

9 に答える 9

127

あなたが持っていることを確認する必要が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

また

routes.php ファイル内で、次のブロック内にルートを作成してみてください

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

Laravel アプリケーションの新しいバージョンの更新

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

ここでも比較できます:

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

于 2015-12-24T14:31:49.833 に答える
20

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

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

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

声明。

于 2015-12-28T01:03:26.953 に答える
5

また、注意してください: テストを作成し、ビューに$errors 変数がある場合は、 WithoutMiddlewareトレイトを使用しないようにしてください。

于 2016-05-19T11:53:42.437 に答える
4

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

しかし

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

これが便利だと思う人もいると思います。

于 2016-02-20T18:15:10.203 に答える
3

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

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

于 2016-03-23T05:45:32.853 に答える
3

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

于 2016-01-02T12:17:57.967 に答える
2

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

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

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

編集: L5.2 を使用しているため、これで質問に答えることができます。ルートをルート グループに入れる必要があります。

Laravel 5.2 検証エラー

于 2015-12-24T21:23:33.387 に答える
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.

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

于 2016-03-31T21:02:54.443 に答える