2013-08-21 8 views
9

wird angenommen, dass ich diese Exception MessageWie verwendet man Exceptions mit Exceptions in Laravel4?

catch (Cartalyst\Sentry\Users\LoginRequiredException $e) 
{ 
    echo 'Login field is required.'; 
} 

haben Wie kann ich diese Nachricht Login-Feld passieren wirdwithErrors() Verwendung erforderlich?

return Redirect::to('admin/users/create')->withInput()->withErrors(); 

Antwort

24
return Redirect::to('admin/users/create') 
     ->withInput() 
     ->withErrors(array('message' => 'Login field is required.')); 
2

Dies hängt davon ab, wo Sie die Ausnahme sind, zu kontrollieren.

Sentry verwendet nicht die Validator-Klasse. Wenn Sie also eine Laravel-Fehlermeldung ausgeben möchten, sollten Sie ein separates Validator-Objekt erstellen und zuerst validieren und erst dann an Sentry übergeben, nachdem Ihre Validierung bestanden wurde.

Sentry kann nur 1 Fehler zurückgeben, da es eine bestimmte Ausnahme abruft. Außerdem ist der Fehler nicht vom selben Typ wie der Fehler in der Validierungsklasse.

Wenn Sentry die Ausnahme abfängt, funktioniert Ihre Validierung offensichtlich nicht.

-Code ist unten nicht, wie Sie es tun sollten, sondern mehr auf eine Kombination aus zu zeigen, was ich glaube, zeigt Wege der Zusammenarbeit mit Laravel/Sentry

Beispiel User-Modell

class User extends Eloquent { 
    public $errors; 
    public $message; 

    public function registerUser($input) { 

     $validator = new Validator::make($input, $rules); 
     if $validtor->fails() { 
      $this->errors = $validator->messages(); 
      return false; 
     } 

     try { 
      // Register user with sentry 
      return true; 
     } 
     catch (Cartalyst\Sentry\Users\LoginRequiredException $e) 
     { 
      $this->message = "failed validation"; 

      return false; 
     } 
     } 
    } 
} 

Usercontroller

class UserController extends BaseController { 

public function __construct (User $user) { $this->user = $user; } 

public function postRegister() 
{ 
    $input = [ 
     'email' => Input::get('email'), 
     'password' => Input::get('password'), 
     'password_confirmation' => Input::get('password_confirmation') 
    ]; 

    if ($this->user->registerUser($input)) { 
     Session::flash('success', 'You have successfully registered. Please check email for activation code.'); 
     return Redirect::to('/'); 
    } 
    else { 
     Session::flash('error', $this->user->message); 
     return Redirect::to('login/register')->withErrors($this->user->errors)->withInput(); 
    } 
} 
+0

Sie haben Syntaxfehler, überprüfen Sie den Code. –

+0

Wurde vor Jahren eingegeben und wurde freihändig getippt - nicht kopieren und einfügen von laufenden Code. Wurde als Proof of Concept geschrieben. – Gravy

+0

Tut mir leid, aber das ist keine Entschuldigung, es ist das gleiche (oder schlimmer) als das Bereitstellen von Code. Falscher Code entmutigt Leute *, die nur etwas arbeiten wollen *. Es ist nicht alt, es ist 5 Monate her. –