如何在Laravel4中使用withError with Exception错误消息?

时间:2013-08-21 21:10:30

标签: laravel laravel-4

假设我有Exception Message

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

如何使用withErrors()传递此消息需要登录字段

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

2 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分: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;
        }
       }
    }
}

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