无法在Laravel中捕获Cartalyst \ Sentinel \ Checkpoints \ NotActivatedException

时间:2014-09-29 02:15:52

标签: php laravel laravel-4 acl

我正在学习如何使用Cartalyst / Sentinel。

我已经

1)安装了Laravel并导入了包。运行迁移并生成必要的表。 2)我创建了用户注册表单和控制器

  1. 创建记录
  2. 创建激活码
  3. 向用户发送包含激活链接的电子邮件。
  4. 如果用户通过点击链接激活,则可以登录。

    如果他们没有激活他们不能​​(这是我想要的)。

    我的问题是我有以下方法试图捕获是否存在NotActivatedException。我想将用户重定向到主页,提醒用户该帐户未激活。但我得到Laravel错误消息而不是我的视图显示错误。这是我的代码。

    公共职能postSignin(){

    try {
    
        // Validation
        $validation = Validator::make(Input::all(), [
            'email' => 'required|email',
            'password' => 'required'
        ]);
    
        if ($validation->fails()) {
            return Redirect::route('signin')->withErrors($validation)->withInput();
        }
    
        $remember = (Input::get('remember') == 1) ? true : false;
    
        if ($user = Sentinel::authenticate(Input::all(), $remember)) {
            return Redirect::route('home')->with('global', 'Howdy ' . $user->username . '!');
        }
    
        $errors = 'Invalid Email / Password';
    
        return Redirect::route('signin')->with('global', $errors);
    
    } catch (NotActivatedException $e) {
    
        $errors = 'Account not activated.';
    
        return Redirect::route('signin')->with('global', $errors);
    
    }
    
    return Redirect::route('home')->with('global', 'There was a problem signing you in.');
    
    }
    

    我不知道为什么捕获不起作用,因为我想显示登录页面,其中包含“帐户未激活”的错误。相反,我得到了这样的Laravel调试页面。

    enter image description here

2 个答案:

答案 0 :(得分:5)

您必须使用完整的班级名称:

catch (\Cartalyst\Sentinel\Checkpoints\NotActivatedException $e)

答案 1 :(得分:2)

您还可以在控制器文件的顶部添加use Cartalyst\Sentinel\Checkpoints\NotActivatedException;,以便能够在不使用完整班级名称的情况下访问它。

在提及NotActivatedException的每个控制器中执行此操作。