2017-08-03 5 views
0

Die letzten paar Tage, ich habe ein Problem. Validierung Fehler Variable kommt leer in Blade-Dateien .. Ich bin Entwicklung einer mehrsprachigen Anwendung in Laravel 5.2.45. Also gibt es die Validierungsfehlermeldungen in jedem von ihnen (resources/lang/{locale} /validation.php).Laravel 5.2 Flash-Nachrichten und Fehler plötzlich nicht funktioniert

Validierungsregeln befinden sich in einer Anforderungsdatei (z. B. ValidateUserRequest), die die Validierungsregeln enthält und die Berechtigung als wahr deklariert. Ich gebe es dann an den Controller. Balg ist meine Middleware und Teil meiner Routes-Datei.

Jede Hilfe wird viel

Kernel.php

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', 
    ], 
]; 

protected $routeMiddleware = [ 
    'auth_pabl' => \App\Http\Middleware\AuthenticateBackEnd::class, 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
]; 

routes.php (alle Controller innerhalb Admin-Verzeichnis)

Route::auth(); 

Route::group ([ 
    'namespace' => 'Admin' 
], 
function() { 

Route::get ('admin/dashboard', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.dashboard' 

]); 

/* 
* Authors 
*/ 

Route::get ('admin/authors', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.authors' 

]); 

Route::post ('admin/authors', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.authors.store' 
]); 

Route::get ('admin/authors/{slug}/edit', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.authors.edit' 
]); 

Route::post ('admin/authors/{username}/edit', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.authors.update' 
]); 

Route::get ('admin/authors/{username}/delete', [ 

     'uses' => '[email protected]', 
     'as' => 'admin.authors.delete' 
]); 

Eine Sitzung Nachricht von etwas kommen würde normalerweise geschätzt werden wie

\Session::flash('flash_contact', 'Success. Data stored'); 

return redirect()->route('admin.events.create'); 

Und es (nicht) angezeigt mit

@if($errors->count()>0) <br /> <br /> 
<div id="#problem" class="alert alert-danger text-pull-left"> 
    <p>{!! trans('admin/form/placeholders.errors') !!}</p> 
    <ul class="errors"> 
     @foreach($errors->all() as $error) 
      <li>{{$error}}</li> 
     @endforeach 
    </ul> 
</div> 
@endif 
@if(Session::has('flash_contact')) 

<div id="success" class="alert alert-success text-center"> 
    {{Session::get('flash_contact')}} 
</div> 
@endif 

Schließlich php Handwerker Route: Liste besagt, dass die "web" Middleware vorhanden ist (ich habe es nicht zweimal manuell deklariert)

// bearbeiten 1 (mitErrors vom Controller)

Beachten Sie hier, dass keine Funktion mitErrors mir das erwartete Ergebnis geben. Unten ist ein Teil meines Controllers.

public function store(Requests\ValidateEventsRequest $request) 
{ 

    try { 
     return $this->dbEvent->add($request); 
    } catch (\Exception $e) { 

     return redirect()->to('/admin/events/add')->withErrors('Error 
      detected'); 
    } 

} 

// bearbeiten 2

Sollte diese Arbeit nicht ???

Route::get('flash', function() { 

    return redirect()->to('flash2')->withErrors('Where are my errors?'); 

}); 

Route::get('flash2', function() { 

    return view('flash2'); 

}); 

Und mein flash2.blade.php

<html> 
<body> 
@if($errors->count()>0) <br /> <br /> 
<div id="#problem" class="alert alert-danger text-pull-left"> 
    <p>{!! trans('admin/form/placeholders.errors') !!}</p> 
    <ul class="errors"> 
    @foreach($errors->all() as $error) 
     <li>{{$error}}</li> 
    @endforeach 
    </ul> 
</div> 
@endif 
this is my flash page 
</body> 
</html> 
+0

Haben Sie versucht, die Fehler zu dumpen? Es gibt eine Möglichkeit, dass es keine Fehler gibt. –

+0

@loannisKaragiannis. Ich denke, das könnte Ihre Lösung sein: https://stackoverflow.com/a/36691774/5704410 –

+0

Leider nicht .. $ Fehler ist immer noch leer. Geschützte 'Taschen' => Array (Größe = 0) leer. Plus, Web-Middleware ist jetzt zweimal passiert, in meiner Route: Liste –

Antwort

0

Um die $errors meinem Verständnis Sie es hinzufügen, um stattdessen auf die ErrorBag müssen zugreifen, tun Sie dies:

return redirect()->route('admin.events.create')->withErrors('not_found', $e->getMessage); 

Dann kannst du auf $errors Variable zugreifen und es dort in der Ansicht finden.

Update: Für diejenigen, die diese Antwort unter dem Ergebnis der Google-Suche finden könnte:

Basierend auf diesen beiden Antworten: here und here und auch die Bestätigung der OP:

bewegen Die Illuminate \ Session \ Middleware \ StartSession :: class nach $ routeMiddleware war die Lösung gemäß den Links und es funktionierte.

Ich hoffe, dass dies bereits in Laravel behoben ist, denke ich, da die Webrouten und andere jetzt in L5.4 getrennt sind.

+0

'$ errors' ist immer verfügbar, wenn Sie die Middleware' ShareErrorsFromSession' verwenden. https://laravel.com/docs/5.4/validation#quick-displaying-the-validation-errors – Marwelln

+0

ja, aber Ihre "Fehler" -Element in der Tasche Fehler wird es nicht machen, wenn Sie es nicht hinzufügen Sie selbst in diesem Fall. Ich kann jedoch falsch liegen, nur wenn das nicht das Problem ist, das Sie gegenüberstehen –

+0

Meine schlechte .. withErrors funktioniert nicht so gut .. Ich werde meinen Beitrag aktualisieren –

Verwandte Themen