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
変数を使用する場合のその他の方法。
どうしてこれなの?以前にこの問題は一度もなかった。
誰かが私を助けてくれますか?
middlewareGroups
のweb
プロパティの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.php
でweb
ミドルウェアを使用しないでください。または、RouteServiceProvider
メソッドを変更して適用しないでください。 web
グループミドルウェア。そうでない場合、web
ミドルウェアグループがこのプロバイダーに自動的に適用され、routes.php
でも使用すると、非常に予期しない結果が生じる可能性があります。
Laravel 5.2.xでも同じ問題が発生しました。
routes.php
ファイルの内部でルートを作成してみてください
Route::group(['middleware' => ['web']], function () {
//routes here
}
ステートメント。
また、次の点に注意してください。テストとビューを記述する場合has $ errors変数は、WithoutMiddleware traitを使用しないでください。
同様の問題があり、ミドルウェアプロパティ配列にもルートを追加することでこの問題を解決しました。
しかし
その後php artisan route:cache
(ルートキャッシュのクリア)を呼び出した後にのみ機能しました。
皆さんの何人かがこれが役に立つことを願っています。
私もこのエラーを見て、後でこの特定のテストの認証をバイパスする手段としてWithoutMiddleware
特性を使用したことに気付きましたが、検証エラーバインディングも削除されてしまいました。そのため、ビューを機能させるには、特性の使用を停止する必要がありました。
App\Http\Kernel.phpファイルに移動します。 $middlewareGroups
プロパティのすべてのものを$middleware
に移動します。
詳細を確認してください- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
countは、変数がすでに存在することを前提としているため、実際には現実的ではありません。条件チェックを@if($errors->has())
または単に@if($errors)
に変更します
また、リダイレクトする場合は、必ずコントローラーでこれを使用してください
return redirect()->back()->with('errors', $validator->messages());
編集:L5.2を使用していることがわかりました。これはあなたの質問に答えるかもしれません。ルートをルートグループに入れる必要があります。
この方法を使用すると、問題が修正されます。
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
それでも解決しない場合は、上記のコードに加えて次の職人コマンドを実行してください。
php artisan key:generate
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.
カーネルを次のようにします