2

我目前正在更新我的一些 Coldfusion 应用程序,并且正在寻找一种保持某些结构的好方法。

目前,它的设置是这样的

ApplicationRoot/Application.cfc (handles things like login, init etc..)
ApplicationRoot/Admin (I want exact same var's as parent folder, but few extra checks to ensure the user has admin rights)

目前,该设置适用于每个目录中的应用程序文件(并且确实有效),但是通过再次声明应用程序/会话范围等所有内容会变得混乱。有没有更好的办法?

4

3 回答 3

4

Application.cfcadmin 子目录中,扩展父目录中的那个,例如:

component extends="ApplicationProxy" {

    // eg: if you need to do something different in the local onApplicationStart:
    public void function onApplicactionStart(){
        super.onApplicationStart();
        // stuff that's different from the parent goes here
    }    

    // if there's nothing different for a given handler, then don't have one in here: the super one will still fire

    // otherwise override each handler in a similar fashion to the onApplicationStart above, with:
    // a) a call to its super equivalent
    // b) anything that needs overriding

}

在您的基本目录中,添加ApplicationProxy.cfc,因此:

component extends="Application" {

}

这样做的原因是 subApplication.cfc不能有extends="Application",因为这看起来像是一个循环引用。但是,没有更好的“合格”方式来识别基本目录中的 Application.cfc,因此需要一个代理。

于 2012-10-01T16:53:49.997 回答
0

我会在 RequestStart() 上的 Application.cfc 中尝试这样的事情:

<cffunction name="onRequestStart" returnType="boolean" output="false" hint="I handle page requests." >
  <cfargument name="requestname" type="string" required="true" >

  <cfif FileExists(GetDirectoryFromPath(arguments.requestname) & '/admin.cfm')>
    <cfinclude template="#GetDirectoryFromPath(arguments.requestname)#/admin.cfm">
  </cfif>
</cffunction>

然后,在您想要设置自定义变量的每个目录中,放置一个 admin.cfm 文件。在这个 admin.cfm 文件中,只需放置一堆标签,或者您想要设置会话和应用程序变量。

于 2012-10-01T16:41:19.570 回答
0

您也可以检查一下用户正在执行的目录,然后运行额外的代码。因此,例如,在您的主 application.cfc onRequestStart() 中,您可以说“当前请求是对 admin 文件夹吗?” 好的,运行包含所有安全功能的函数 X。如果您愿意,您甚至可以将此代码作为附加函数包含在您的 application.cfc 中。

或者,如果您通过执行扩展的东西来使用其他答案之一,您将希望在您希望其他代码运行的每个函数中放置一个 super.function() 调用。例如,使用 onRequest start,在 sub-Application.cfc onRequestStart() 开头的 super.onRequestStart() 可以在子级启动之前调用父级内容。

我个人更喜欢第一种方法,因为当您确实只有一个应用程序时,它可以保持整洁。

于 2012-10-01T16:59:16.173 回答