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

30
return Redirect::to('admin/users/create')
       ->withInput()
       ->withErrors(array('message' => 'Login field is required.'));
于 2013-09-03T13:00:54.270 回答
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 回答