Wenn ich einen Benutzer in meinem Laravel-Projekt registrieren möchte, wird auf der Seite immer angezeigt
Nicht definierte Variable: Fehler (Ansicht: /var/www/resources/views/auth/register.blade.php) "
Gemäß der Laravel-Dokumentation sollte $errors
immer automatisch gesetzt werden:
Daher ist es wichtig zu beachten, dass eine Variable $ errors bei jeder Anforderung in allen Ihren Ansichten verfügbar ist, sodass Sie davon ausgehen können, dass die Variable $ errors immer definiert ist und sicher verwendet werden kann.
Ich habe dies auf jeder Ansicht, wenn ich benutze:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
oder auf andere Weise, wenn ich die Variable $errors
verwenden möchte.
Warum ist das? Ich hatte dieses Problem noch nie zuvor.
Kann mir bitte jemand weiterhelfen?
Sie sollten sicherstellen, dass Sie in app/Http/Kernel.php
in der middlewareGroups
-Eigenschaft für web
Folgendes haben:
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
in diesem Array. Vergleichen Sie dies mit https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php
EDIT
Es scheint, dass Sie 'middleware' => 'web'
für die Route hinzufügen müssen, die Sie verwenden, oder \Illuminate\View\Middleware\ShareErrorsFromSession::class,
in das $middleware
-Eigenschaftsarray legen
Versuchen Sie, die Routen innerhalb der Datei "routes.php" innerhalb des folgenden Blocks zu erstellen
Route::group(['middleware' => ['web']], function () {
//routes here
});
AKTUALISIERUNG FÜR NEUERE VERSIONEN VON LARAVEL-ANWENDUNG
Beachten Sie, dass Sie möglicherweise auch auf Probleme stoßen, wenn Sie web
Middleware zweimal verwenden. Die Laravel-Anwendung 5.2.27 wurde geändert (verwechseln Sie sie nicht mit dem derzeit verwendeten Laravel-Framework - Sie können das Laravel-Framework beispielsweise 5.2.31 verwenden, haben aber die Laravel-Anwendung in Version 5.2.24) Welche web
-Middleware wird automatisch für alle Routen angewendet. Bei Problemen sollten Sie daher Ihre app/Providers/RouteServiceProvider.php
-Datei öffnen und deren Inhalt überprüfen.
Sie können es auch hier vergleichen:
Falls Sie eine neuere Version haben (dies gilt automatisch für web
-Middleware), sollten Sie web
-Middleware nicht mehr in routes.php
verwenden, oder Sie sollten Ihre RouteServiceProvider
-Methode so ändern, dass web
-Gruppen-Middleware nicht angewendet wird. Andernfalls, wenn die web
-Middleware-Gruppe automatisch in diesem Provider angewendet wird und Sie sie auch in routes.php
verwenden, können sehr unerwartete Ergebnisse auftreten.
Ich hatte das gleiche Problem mit Laravel 5.2.x.
Versuchen Sie in der routes.php
-Datei, Ihre Routen innerhalb der
Route::group(['middleware' => ['web']], function () {
//routes here
}
aussage.
Ich hatte ein ähnliches Problem und löste dieses Problem, indem ich Routen in das Middleware-Eigenschafts-Array hinzufügte.
ABER
es funktionierte nur nach dem anschließenden Aufruf von php artisan route:cache
(Löschen des Routencaches).
Ich hoffe, einige von euch würden das nützlich finden.
Ich sah diesen Fehler auch und später wurde mir klar, dass ich die WithoutMiddleware
-Eigenschaft als Mittel zur Umgehung der Authentifizierung für diesen bestimmten Test verwendet hatte. Am Ende wurde jedoch auch die Validierungsfehlerbindung entfernt. Also musste ich aufhören, die Eigenschaft zu nutzen, um die Ansichten aufrecht zu erhalten.
Wechseln Sie zur Datei App\Http\Kernel.php. Verschieben Sie alle Elemente der $middlewareGroups
-Eigenschaften in $middleware
.
Weitere Informationen finden Sie hier. - http://www.tisuchi.com/laravel-5-2-undefined-variable-error-validation/
Beachten Sie auch Folgendes: Wenn Sie Tests schreiben und Ihre Variable hat $ errors hat, stellen Sie sicher, dass Sie WithoutMiddleware trait nicht verwenden.
Ihr Problem wird mit dieser Methode behoben.
Route::group(['middleware' => ['web']], function () {
//routes should go here
});
Wenn dies nicht hilft, führen Sie einfach zusätzlich zum obigen Code den folgenden Befehl aus:
php artisan key:generate
Ich habe dies während der Verwendung von 5.2 gelöst. *
count ist nicht wirklich realiable, da davon ausgegangen wird, dass die Variable bereits existiert. Ändern Sie die Zustandsüberprüfung in: @if($errors->has())
oder nur @if($errors)
Wenn Sie umleiten, stellen Sie sicher, dass Sie dies in Ihrem Controller verwenden
return redirect()->back()->with('errors', $validator->messages());
BEARBEITEN: Jetzt gesehen, dass Sie L5.2 verwenden. Dies kann Ihre Frage beantworten - Sie müssen Ihre Routen in die Routengruppe setzen.
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.
machen Sie Ihren Kernel so aussehen