1

在使用 Sentry 捆绑包时,我创建了LoginController控制器来检查用户是否登录到他们被重定向的位置,以防万一。我的目的是将我所有的受限页面扩展到这个类,以使我的代码更高效。但为什么它不起作用?

登录控制器:

// Extends the BaseController
class LoginController extends BaseController {

    public function __construct() {
        if(!Sentry::check()) return Redirect::to('login');
    }

}

我的实际控制人:

class MainController extends LoginController {

    public function getIndex() {

        if(Sentry::getUser()->hasAccess('view dashboard')) {
            return View::make('admin.index');
        } else {
            return 'You have no access!';
        }
    }

}

我总是得到的错误:

Call to a member function hasAccess() on a non-object

什么有效:如果我if(!Sentry::check()) return Redirect::to('login');直接添加 ingetIndex()而不是__construct,则重定向工作正常。为什么?

4

4 回答 4

1

注意错字!__construct 缺少一个 s。

于 2013-06-05T16:37:47.220 回答
0

可能是因为你没有登录?

你可能需要这样的东西

try
{
    // Get the current active/logged in user
    $user = Sentry::getUser();
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
    // User wasn't found, should only happen if the user was deleted
    // when they were already logged in or had a "remember me" cookie set
    // and they were deleted.
}
于 2014-03-04T18:50:35.387 回答
0

我也认为这个问题是

public function __construct()
{

   parent::__construct();
}

如果要执行它,您将调用父类的构造

于 2013-06-05T05:10:02.520 回答
0

我看到的方式是 __construct() 方法只会在初始化时调用。在您的情况下,您正在扩展它而不是初始化它。如果您执行类似的操作,它可能会起作用。

class MainController extends LoginController {
public function __construct()

{

   return parent::__construct();
}

public function getIndex() {

        if(Sentry::getUser()->hasAccess('view dashboard')) {
            return View::make('admin.index');
        } else {
            return 'You have no access!';
        }
    }

希望这可以帮助。

于 2013-06-05T04:53:59.337 回答