2

今日からLaravelフレームワークを学び始めました。

ユーザーのセッションをグローバルに確認したいと思います。以下のように、基本クラスのコンストラクターにフィルターを入れます。

class Base_Controller extends Controller {

    public function __construct() {

        parent::__construct();

        $this->filter('before', 'auth')->except(array('login@index'));

    }

}

1 つの問題があることを除いて、正常に動作します。ログイン コントローラーの認証フィルターを無視したいと思います。それ、どうやったら出来るの?

私は試した

except(array("login"))except(array("login.index))、およびexcept(array("login@index")) .どれも機能しませんでした

4

1 に答える 1

2

コントローラーでの使用$this->filter()には、ファイルでの使用とは異なるアプローチがありroutes.phpます。コントローラー内で使用するとexcept()、そのコントローラーのメソッドのみが受け入れられます。

認証フィルターをチェックするBase_Controllerようなものから拡張する新しいコントローラーを作成することで、問題を解決できます。コントローラーが「Auth」であることを検出した場合にのみBase_Auth_Controller、おそらくRoute::filter('before', function(){});and を使用できますが (ヒント: )、 a を確実に除外することはできません。return;Request::route()->controllercontroller@action

または、次のようにします。

public function __construct() {

    parent::__construct();

    // you should check what exactly returns, I don't remember actually
    if(Request::route()->controller != 'Auth_Controller')
    {
         $this->filter('before', 'auth')->except(array('login@index'));
    }

}
于 2012-10-05T01:16:37.177 に答える