12

私がこれを持っていると仮定しますException Message

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

このメッセージを渡すにはどうすればよい ですかLogin field is required using withErrors()?

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

2 に答える 2

3

これは、例外をキャッチする場所によって異なります。

Sentry は Validator クラスを使用しません。したがって、Laravel の方法でエラー メッセージを返したい場合は、別の Validator オブジェクトを作成して最初に検証し、検証に合格した後にのみ Sentry に渡す必要があります。

Sentry は、特定の例外をキャッチしているため、1 つのエラーのみを返すことができます。さらに、エラーは検証クラスのエラーと同じタイプにはなりません。

また、Sentry が例外をキャッチした場合、検証は明らかに機能していません。

以下のコードは、あなたがそれを行うべき方法ではありませんが、Laravel / Sentryで作業する方法を示していると私が信じていることの組み合わせを示すためのものです

例 ユーザーモデル

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;
        }
       }
    }
}

ユーザーコントローラー

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();
    }
}   
于 2013-10-17T13:14:26.490 に答える