Variable non définie: erreurs dans Laravel
quand je veux enregistrer un utilisateur dans mon projet laravel, la page dit toujours
variable non définie: erreurs (View: /var/www/resources/views/auth/register.lame.php) "
selon la documentation de Laravel, $errors
doit toujours être positionné automatiquement:
donc, il est important de noter qu'une variable $ errors sera toujours disponible dans toutes vos vues sur chaque requête, vous permettant d'assumer commodément la variable $ errors est toujours définie et peut être utilisée en toute sécurité.
j'ai cela sur sur chaque vue lorsque j'utilise:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
ou de toute autre façon lorsque je veux utiliser la variable $errors
.
pourquoi? Je n'ai jamais eu ce problème avant.
quelqu'un Peut m'aider s'il vous plaît?
10 réponses
vous devez vous assurer que dans app/Http/Kernel.php
dans middlewareGroups
propriété pour web
vous avez:
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
dans cette rangée. Comparez ceci avec https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php
MODIFIER
il semble que vous ayez besoin d'ajouter 'middleware' => 'web'
pour la route que vous utilisez ou de mettre \Illuminate\View\Middleware\ShareErrorsFromSession::class,
dans $middleware
tableau de propriétés
ou
à L'intérieur des routes.fichier php essayez de créer vos routes dans le bloc suivant
Route::group(['middleware' => ['web']], function () {
//routes here
});
MISE À JOUR POUR LES NOUVELLES VERSIONS DE L'APPLICATION LARAVEL
soyez conscient que vous pourriez rencontrer des problèmes aussi dans le cas où vous utilisez web
middleware deux fois. Il y a eu un changement dans L'application Laravel 5.2.27 (ne le confondez pas avec Laravel framework que vous utilisez actuellement - Vous pouvez utiliser Laravel framework par exemple 5.2.31 mais avoir L'application Laravel dans la version 5.2.24) dans laquelle web
middleware est appliqué automatiquement pour toutes les routes. Ainsi, en cas de problèmes, vous devriez ouvrir votre fichier app/Providers/RouteServiceProvider.php
et vérifier son contenu.
vous pouvez le comparer aussi ici :
dans le cas où vous avez une version plus récente (qui s'applique web
middleware automatiquement), vous ne devriez pas utiliser web
middleware dans routes.php
plus ou vous devriez modifier votre RouteServiceProvider
méthode pour ne pas appliquer web
middleware de groupe. Sinon, si web
middleware groupe est appliqué automatiquement dans ce fournisseur et vous l'utilisez aussi dans routes.php
vous pourriez obtenir des résultats très inattendus.
j'ai eu ce même problème avec Laravel 5.2.x.
dans le fichier routes.php
essayez de créer vos routes dans le fichier
Route::group(['middleware' => ['web']], function () {
//routes here
}
déclaration.
j'ai eu un problème similaire et j'ai résolu celui-ci en ajoutant des routes dans le tableau de propriétés middleware aussi bien,
mais
cela n'a fonctionné qu'après avoir appelé php artisan route:cache
(clearing route cache) par la suite.
j'espère que certains d'entre vous trouveront cela utile.
je voyais cette erreur aussi et j'ai réalisé plus tard que j'avais utilisé le trait WithoutMiddleware
comme un moyen de contourner l'authentification pour ce test particulier, mais il a fini par supprimer la liaison d'erreur de validation aussi. Donc j'ai dû arrêter d'utiliser le trait pour garder les vues de travail.
Aller à App\Http\Noyau.php fichier. Déplacer toutes les choses de $middlewareGroups
propriétés à $middleware
.
Vérifier pour plus de détails- http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation /
aussi pour être au courant de: Si vous écrivez des tests et votre vue a variable $errors assurez-vous que vous n'utilisez pas WithoutMiddleware trait.
count n'est pas vraiment réalisable puisqu'il suppose que la variable existe déjà. changez le contrôle de l'état en: @if($errors->has())
ou tout simplement @if($errors)
aussi si vous redirigez, assurez-vous de l'utiliser dans votre controller
return redirect()->back()->with('errors', $validator->messages());
EDIT: vu maintenant que vous êtes à l'aide de L5.2 Cela peut répondre à votre question - vous devez mettre vos itinéraires dans le groupe de Route.
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.
faites ressembler votre noyau à ceci
votre problème sera corrigé en utilisant cette méthode.
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
si cela ne vous aide pas, exécutez simplement la commande artisan suivante en plus du code ci-dessus:
php artisan key:generate
j'ai résolu de cette façon en utilisant 5.2.*
ce n'était pas en fait une erreur, c'était un avertissement que vous pouvez supprimer en utilisant la fonction php error_reporting ()
j'ai supprimé avertissement dans mon laravel 5.6 en utilisant
error_reporting (E_ALL ^ E_NOTICE);
plus de détails: http://php.net/manual/en/function.error-reporting.php
Espère que ça va vous aider, je vous remercie