【问题标题】:Unable to catch Cartalyst \ Sentinel \ Checkpoints \ NotActivatedException in Laravel无法在 Laravel 中捕获 Cartalyst \ Sentinel \ Checkpoints \ NotActivatedException
【发布时间】:2014-09-29 02:15:52
【问题描述】:

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

我已经

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

  1. 创建记录
  2. 创建激活码
  3. 向用户发送一封包含激活链接的电子邮件。

如果用户通过点击链接激活,他们就可以登录。

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

我的问题是我有以下方法尝试捕获是否存在 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.');

}

我不确定为什么 catch 不起作用,因为我想显示带有“帐户未激活”错误的登录页面。相反,我得到了像这样的 Laravel 调试页面。

【问题讨论】:

  • 尝试在控制器文件的顶部添加use Cartalyst\Sentinel\Checkpoints\NotActivatedException;
  • 谢谢 :) 我必须为我的所有控制器都这样做吗?

标签: php laravel laravel-4 acl


【解决方案1】:

你必须使用完整的类名:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多