问题
When I want to register a user in my laravel project, the page always says
Undefined variable: errors (View: /var/www/resources/views/auth/register.blade.php)\"
According to the Laravel documentation, $errors
should always automatically be set:
So, it is important to note that an $errors variable will always be available in all of your views on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used.
I have this on on every view when I use:
@if (count($errors) > 0)
<div class=\"alert alert-danger\">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
or any other way when I want to use the $errors
variable.
Why is this? I never had this problem before.
Can someone help me please?
回答1:
You should make sure that in app/Http/Kernel.php
in middlewareGroups
property for web
you have:
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
in this array. Compare this with https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php
EDIT
It seems you need to add 'middleware' => 'web'
for route you are using or put \Illuminate\View\Middleware\ShareErrorsFromSession::class,
into $middleware
property array
or
Inside of the routes.php file try to create your routes within the following block
Route::group(['middleware' => ['web']], function () {
//routes here
});
UPDATE FOR NEWER VERSIONS OF LARAVEL APPLICATION
Be aware that you might run into problems also in case you use web
middleware twice. There was a change in Laravel application 5.2.27 (don't confuse it with Laravel framework you use at the moment - you might use Laravel framework for example 5.2.31 but have Laravel application in version 5.2.24) in which web
middleware is applied automatically for all routes. So in case of problems, you should open your app/Providers/RouteServiceProvider.php
file and verify its content.
You can compare it also here :
RouteServiceProvider for Laravel application 5.2.24
RouteServiceProvider for Laravel application 5.2.27
In case you have newer version (that applies web
middleware automatically), you shouldn't use web
middleware in routes.php
anymore or you should modify your RouteServiceProvider
method to not apply web
group middleware. Otherwise if web
middleware group is automatically applied in this provider and you use it also in routes.php
you might get very unexpected results.
回答2:
I had this very same issue with Laravel 5.2.x.
Inside of the routes.php
file try yo create your routes within the
Route::group(['middleware' => ['web']], function () {
//routes here
}
statement.
回答3:
Also to be aware of: If you write tests and your view has $errors variable make sure you don't use WithoutMiddleware trait.
回答4:
I had similar problem and solved this one by adding routes into middleware property array as well,
BUT
it worked only after calling php artisan route:cache
(clearing route cache) subsequently.
I hope some of you would find this useful.
回答5:
I was seeing this error too and later realised I had used the WithoutMiddleware
trait as a means to bypass authentication for this particular test, but it ended up removing the validation error binding too. So I had to stop using the trait to keep the views working.
回答6:
Go to App\Http\Kernel.php file. Move all the things of $middlewareGroups
properties to $middleware
.
Check for more details- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
回答7:
count is not really realiable since it assumes the variable already exists. change the condition check to: @if($errors->has())
or just @if($errors)
Also if you are redirecting make sure to use this in your controller
return redirect()->back()->with('errors', $validator->messages());
EDIT: seen now that you are using L5.2 This may answer your question - you need to put your Routes in Route group.
Laravel 5.2 validation errors
回答8:
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.
make your kernel look like this
回答9:
Your problem will be fixed by using this method.
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
If this doesn't help you, just run the following artisan command in addition to the above code:
php artisan key:generate
I solved in this way while using 5.2.*
回答10:
It was not actually error, it was warning you can remove using php error_reporting()
function
I removed warning in my Laravel 5.6 by using
error_reporting(E_ALL ^ E_NOTICE);
More Detail : http://php.net/manual/en/function.error-reporting.php
Hope it helps.
来源:https://stackoverflow.com/questions/34454081/undefined-variable-errors-in-laravel