0

J'utilise la classe App::error de Laravel 4 pour intercepter les exceptions Sentry dans mon application et transmettre les données au modèle en utilisant la fonction withErrors().Laravel 4 'avec' données persistantes

itinéraire simple:

routes.php

Route::post('/login... 

... 

$credentials = array(
    'email' => Input::get('email'), 
    'password' => Input::get('password') 
); 

$user = Sentry::authenticate($credentials); 

// Exception thrown... 

ensuite pour attraper les exceptions:

exceptions.php

App::error(function(Cartalyst\Sentry\Users\WrongPasswordException $e) { 
    return Redirect::back()->withErrors(array('failed' => 'Email or password is incorrect'))->withInput(); 
}); 

Dans la vue:

/views/login/login.blade.php

@if ($errors->has('failed')) 
    <strong>{{ $errors->first('failed') }}</strong> 
@endif 

Le problème est, lorsque vous actualisez la page après un journal échoué dans la tentative de ces erreurs persistent si vous les voyez deux fois. Rafraîchissant une seconde fois, ils ont effacé. Idem pour l'entrée (passé avec withInput()).

Si les erreurs sont interceptées dans la route (plutôt que dans App:error), tout fonctionne normalement. Dois-je effacer les données stockées manuellement en utilisant les méthodes App::error?

Répondre

0

J'utilise toujours Session :: flash() pour afficher les erreurs. Flash va (pour une requête) définir (et automatiquement annuler) les données dans votre session. Ainsi, vous pouvez aller comme

App::error(function(Cartalyst\Sentry\Users\WrongPasswordException $e) { 
    Session::flash('error', 'Email or password is incorrect.'); 
    return Redirect::back()->withInput(); 
}); 

et attraper dans votre vue:

@if($message = Session::get('success')) 
    <div class="alert-box success"> 
     {{ $message }} 
    </div> 
@endif 

@if($message = Session::get('error')) 
    <div class="alert-box alert"> 
     {{ $message }} 
    </div> 
@endif 

Sur le même sujet, je vous suggère de suivre la notation try-catch d'habitude comme ceci:

try { 
    // do things that might throw an Exception here... 

} catch(Cartalyst\Sentry\Users\UserExistsException $e) { 
    // catch the Exception... 

    Session::flash('error', Lang::get('register.user_already_exists')); 
    return Redirect::action('[email protected]')->withInput(); 

} 

... parce que ce que vous faites actuellement avec App::error() est probablement un peu plus lourd que cela.