CFWheels - 过滤器问题'除了'。冲突的动作名称

时间:2012-04-25 21:48:54

标签: model-view-controller coldfusion railo cfwheels

我有一个过滤器设置,它运行一个函数来检查某些操作是否存在用户会话,如此;

<cffunction name="init">

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

    </cffunction>

问题是,这些是动作名称......与我的其他控制器发生冲突。

例如,我有2个控制器'用户'和'链接'。其中每个都有一个名为create的动作,所以我的URL就像这样:

/用户/创建/ /链接/创建/

过滤器如何知道与哪个控制器关联?有没有办法在'except'子句中使用控制器名称为某些'actions'添加前缀?

例如,可能是:

<cffunction name="init">

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

    </cffunction>

我记得试过这个,但它不起作用并且不知所措。

希望你能理解我在这里说的话。我不想在单独的控制器中将每个动作命名为完全唯一的名称。

谢谢, 迈克尔。

1 个答案:

答案 0 :(得分: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>