it-swarm.com.de

Nicht definierte Variable: Fehler in Laravel

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?

58
Anhinga

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

oder

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.

100

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.

19
Felipe Peña

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.

3
Tom11

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.

2
Nikush

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/

2
tisuchi

Beachten Sie auch Folgendes: Wenn Sie Tests schreiben und Ihre Variable hat $ errors hat, stellen Sie sicher, dass Sie WithoutMiddleware trait nicht verwenden. 

2

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. *

0

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.

Laravel 5.2 Validierungsfehler

0
Vojko
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

0
Amit Rai