2016-04-24 12 views
3

Ich versuche, Validierungsfehler anzuzeigen, wenn Sie in Laravel 5.2 zu einer Ansicht zurückkehren. Die $ errors Variable leer ist und in einer ähnlichen Frage Laravel 5.2 $errors not appearing in Blade es hat vorgeschlagen:

(1)

oder

(2) wickeln die entsprechende Route die ShareErrorsFromSession Middleware, um die $ Middleware-Objekt bewegen mit Web-Middleware.

Natürlich ist Lösung 1 (die funktioniert) in meinem Fall nicht anwendbar, da ich einige API-Routen habe, wie es in Laravel 5.2 validation errors gut angegeben ist.

Um genauer zu sein, verwende ich mehrere Authentication Guard-Treiber und Routen, die Token-Authentifizierung verwenden, sind zustandslos. Was wir übrig haben, ist Lösung 2. Es sollte funktionieren, aber es funktioniert nicht (ODER ich vermisse etwas). Egal, ob ich meine Routen setzen (die, in denen ich will Validierungsfehler anzuzeigen) innerhalb der Gruppe:

Route::group(['middleware' => ['web','auth:web']], function() {   
    ... 
} 

oder gerade innen:

Route::group(['middleware' => 'web'], function() { 
    ... 
} 

die Fehler $ variable scheint leer. Dumping die Variable gibt:

object(Illuminate\Support\ViewErrorBag)#209 (1) { 
    ["bags":protected]=> 
    array(0) { 
    } 
} 

Die Web-Gruppe wird in der Regel in kernel.php wie folgt definiert:

protected $middlewareGroups = [ 
     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class,    
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \App\Http\Middleware\VerifyCsrfToken::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
     ], 
    ]; 

Mein Controller wie folgt aussieht:

$form = Input::all(); 
$rules = Config::get('validation.contact');    
$validation = Validator::make($form,$rules); 

if ($validation->fails()){    
    return Redirect::back()->withErrors($validation); 
} else { 
    ... 
} 

Irgendwelche Ideen?

UPDATE (nach beantwortet):

Sie hatten Recht Alexander! Ich habe diese letzte Änderung verpasst. Aber was ist mit API-Routen, die diese Middlewares nicht aufrufen müssen? Sollten wir diese Änderung wie in Web middleware being applied to API routes in Laravel 5.2 beschrieben zurücknehmen? Wenn ja, dann ist es vielleicht besser, Middlewares von der Webgruppe zu entfernen und sie in eine neue Gruppe zu legen (z. B. myweb). Auf diese Weise machen wir uns nicht mit dem Framework herum.

Antwort