在使用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');
而不是getIndex()
添加__construct
,则重定向工作正常。为什么呢?
答案 0 :(得分:1)
注意拼写错误! __contruct缺少s。
答案 1 :(得分: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!';
}
}
希望这有帮助。
答案 2 :(得分:0)
我认为问题也是
public function __construct()
{
parent::__construct();
}
如果要执行它,您将调用父类的构造
答案 3 :(得分:0)
也许是因为你没有登录?
您可能需要this
之类的内容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.
}