2012-04-25 8 views
4

私は、ユーザセッションが特定のアクションに存在するかどうかをチェックする機能を実行するフィルタ設定を持っています。CFWheels - 'except'というフィルタの問題。アクション名が矛盾しています

<cffunction name="init"> 

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

    </cffunction> 

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

、私は2つのコントローラー「ユーザー」と「リンク」を持っています。

/ユーザー//

がどのようにフィルタがに関連付けることがどのコントローラで知ることができます作成​​// /リンクを作成します。私のURLのは非常に似ているように、これらのそれぞれは、作成と呼ばれる作用を有しますか?コントローラー名に 'except'句の特定の「アクション」の接頭辞を付ける方法はありますか?例えば

は、おそらくのようなもの:

<cffunction name="init"> 

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

    </cffunction> 

は、私はこれをしようと覚えているが、それは仕事とborkedませんでした。

私はここで何を言っているのか理解していますか?私は別々のコントローラーのすべてのアクションに完全に固有の名前を付ける必要はありません。

ありがとう、 マイケル。

答えて

3

あなたはこれを実現するための基本的な継承を使用することができます。

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

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

はその後(例えば user、)任意の子コントローラで、あなたは除外したアクションを指定することができます。これは、親コントローラが実際に子供について何も知らなくてはならないため、うまく機能します。それは気になるものだけを実行し、他には何もしません。別の子 は常にを実行する checkLoginためたい場合

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

は、それはcheckLoginExceptの値を渡すべきではありません。

<!--- controllers/Foo.cfc ---> 
<cffunction name="init"> 
    <cfset super.init()> 
</cffunction> 
+0

感謝を - これは私が探していたまさにでした!私はCFCの遺産の全体像については考えていませんでした。 –

関連する問題