4

ユーザーセッションが特定のアクションに存在するかどうかを確認する関数を実行するフィルター設定があります。

<cffunction name="init">

        <cfset filters(through="checkLogin", except="login,register,signin,create,home,profile") />

    </cffunction>

問題は、これらがアクション名であるということです...私が持っている他のコントローラーと競合しています。

たとえば、「ユーザー」と「リンク」の 2 つのコントローラーがあります。これらのそれぞれには create というアクションがあるため、私の URL は次のようになります。

/user/create/ /link/create/

フィルターは、どのコントローラーに関連付けるかをどのように知ることができますか? 「except」句の特定の「アクション」の前にコントローラー名を付ける方法はありますか?

たとえば、次のようなものかもしれません。

<cffunction name="init">

        <cfset filters(through="checkLogin", except="user/login,user/register,user/signin,link/create,main/home,user/profile") />

    </cffunction>

これを試したのを覚えていますが、うまくいかず、失敗しました。

ここで私が言っていることを理解していただければ幸いです。すべてのアクションに個別のコントローラーで完全に一意の名前を付ける必要はありません。

ありがとう、マイケル。

4

1 に答える 1

3

基本的な継承を使用して、これを実現できます。

<!--- controllers/Controller.cfc --->
<cffunction name="init">
    <cfargument name="checkLoginExcept" type="string" required="false" default="">

    <cfset filters(through="checkLogin", except=arguments.checkLoginExcept)>
</cffunction>

次に、任意の子コントローラー(userたとえば)で、除外するアクションを指定できます。親コントローラーはその子について何も知らないはずなので、これはうまく機能します。それはそれが気にかけていることだけを実装します。

<!--- controllers/User.cfc --->
<cffunction name="init">
    <cfset super.init(checkLoginExcept="login,register,signIn,profile")>
</cffunction>

別の子が常に実行したい場合checkLoginは、次の値を渡さないでくださいcheckLoginExcept

<!--- controllers/Foo.cfc --->
<cffunction name="init">
    <cfset super.init()>
</cffunction>
于 2012-04-26T13:39:58.930 に答える