2012-04-25 3 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의 모든 상속에 관해서는 생각하지 못했습니다. 바로 그 좋은 조언입니다. –