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');直接追加すると、リダイレクトは正常に機能します。なんで?getIndex()__construct

4

4 に答える 4

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

私が見る方法は __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 に答える