标签: cfc

ColdFusion对象是通过引用还是通过值传递的?

ColdFusion对象(即通过cfobject调用的CFC)通常是通过引用还是通过值传递(复制到内存中)?是否可以强制ColdFusion以任何一种方式传递对象?

oop coldfusion cfc cfml

24
推荐指数
3
解决办法
2673
查看次数

在Coldfusion中,如何初始化位于当前路径文件夹上方的组件?

如果我有一个如下所示的文件夹结构:

/
/bin/myComponent.cfc
/reports/index.cfm
Run Code Online (Sandbox Code Playgroud)

如何从index.cfm启动myComponent.cfc?

myService = createObject("component", "bin.myComponent");
Run Code Online (Sandbox Code Playgroud)

使用点语法,我知道如何进入更深层次的文件夹,但如何进入文件夹,然后进入另一个文件夹?使用斜杠语法,它将是这样的:

../bin/myComponent.cfc
Run Code Online (Sandbox Code Playgroud)

但是createObject()不能那样工作.我想保留一个相对路径,以便我可以将此文件夹移动到另一台服务器而不会破坏路径.

想法?谢谢!

编辑:

我的示例没有为您提供的广告素材答案显示足够深的文件夹结构.这是我应该做的:

/[my project folder]/
/[my project folder]/bin/myComponent.cfc
/[my project folder]/reports/index.cfm
Run Code Online (Sandbox Code Playgroud)

我的基本问题是,当使用从index.cfm到myComponent.cfc的createObject("component","dot path")时,是否可以使用UP目录.如果[my project folder]的名称在所有安装中都不是静态的该项目.

如果答案是否定的,那么我只需要弄清楚最佳实践是什么,无论是映射还是应用程序设置.

coldfusion cfc

17
推荐指数
2
解决办法
1万
查看次数

将application.cfc扩展到子目录中

我有以下两个文件,并希望第二个扩展第一个:

  1. wwwroot的\网站\的Application.cfc
  2. wwwroot的\网站\目录\的Application.cfc

但是,当我为第二个文件声明组件时,我不确定要在extends属性中放入什么. 我的问题是几个开发站点(有一个共享的SVN存储库)正在运行ColdFusion的同一个实例,所以我不能像这样在CF管理员中创建一个映射:

<cfcomponent extends="site.application">
Run Code Online (Sandbox Code Playgroud)

但是,ColdFusion不喜欢:

<cfcomponent extends="..application">
Run Code Online (Sandbox Code Playgroud)

或任何动态输入,如:

<cfcomponent extends="#expandpath('..').#application">
Run Code Online (Sandbox Code Playgroud)

创建运行时映射(如此处)似乎也不可行.在基础application.cfc中创建它是没用的,因为在声明继承cfc时该代码尚未执行; 并且我无法在定义继承组件之前创建映射,因为还没有应用程序将其附加到.

有什么方法可以引用父目录来完成我的扩展吗?

编辑以澄清:由于上面的粗体文本,ApplicationProxy解决方案不起作用.现在,作为一种解决方法,我们只是不将\ dir\application.cfc检查到SVN,以便每个开发人员都可以保留一个扩展他/她自己的根application.cfc的版本.显然,这并不理想.

coldfusion cfc application.cfc

13
推荐指数
2
解决办法
6351
查看次数

ColdFusion cfc方法可以确定自己的名字吗?

我正在创建一个API,在每个方法中,我都会调用一个用于审计和故障排除的日志记录方法.就像是:

<cffunction name="isUsernameAvailable">
    <cfset logAccess(request.userid,"isUsernameAvailable")>
    ......
</cffunction>
Run Code Online (Sandbox Code Playgroud)

我想避免手动重复方法名称.有没有办法以编程方式确定它?

我看过GetMetaData(),但它只返回有关组件的信息(包括所有方法),但没有关于当前调用哪个方法的信息.

coldfusion cfc

13
推荐指数
2
解决办法
4344
查看次数

映射到ColdFusion中的CFC

在我的应用程序中,我将所有CFC都放在cfc文件夹中.从站点根目录,我可以毫不费力地访问它们,只需在我的<cfinvoke>标签中引用它们即可component=cfc.mycomponent method=mymethod

问题是,当我想从另一个不在根目录中的页面访问cfc时,我无法使用component=../.cfc.mycomponent该cfc与cfc取得联系.

我在这做错了什么?

mapping coldfusion cfc

12
推荐指数
2
解决办法
1万
查看次数

如何确定ColdFusion对象所在的上下文?

所以,鉴于我有一个这个组件的实例:

foo.cfc

<cfcomponent>
  <cffunction name="locateMe">
    <cfreturn "I don't know where I live!">
  </cffunction>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)

而且,这个其他组件,fooParent.cfc:

<cfcomponent>
  <cfset this.foo = createObject("component", "foo")>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)

假设我用几种不同的方式创建"foo"的实例:

<cfset myStruct = {}>
<cfset myStruct.foo = createObject("component", "foo")>

<cfset myFoo = createObject("component", "foo")>

<cfset myFooParent = createObject("component", "fooParent")>

<cfoutput>
#myStruct.foo.locateMe()#<br>
#myFoo.locateMe()#<br>
#myFooParent.foo.locateMe()#<br>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

正如所料,这输出:

I don't know where I live!
I don't know where I live!
I don't know where I live!
Run Code Online (Sandbox Code Playgroud)

我想知道的是,我可以在foo.cfc中做些什么来告诉我关于它被调用的上下文的内容(任何事情!)?因为一切最终都存在于(至少)某种范围内,并且所有范围都是一种对象,我所说的是我真的想从某个给定的实例化对象中确定包含对象的某种方式.最后,从上面的示例代码片段构建foo.cfc的某种方式,以便这样的东西可以作为我的输出:

I live within a "class coldfusion.runtime.Struct" instance!
I live within a …
Run Code Online (Sandbox Code Playgroud)

java coldfusion cfc cfml

11
推荐指数
1
解决办法
498
查看次数

你如何使用cfscript从另一个cfm页面调用cfc中的cffunction?

我有一个test.cfm页面,并希望 从该页面(test.cfm)调用一个<cffunction>名为errorEmailusing 的cfc <cfscript>而不是

<cfinvoke component = "#cfcPath#" method = "errorEmail" returnVariable = "myReturn" 
    description = "get list of projman">
</cfinvoke> 
Run Code Online (Sandbox Code Playgroud)

我试过了:

<cfscript>
   errorEmail(cfcPath);
</cfscript>
Run Code Online (Sandbox Code Playgroud)

coldfusion cfc

11
推荐指数
1
解决办法
1万
查看次数

使用应用程序范围的UDF扩展ColdFusion

我一直在探索构建我的ColdFusion应用程序的不同方法,并且我正在寻找关于提供应用程序范围UDF的最佳方法的一些意见.

对于我的每个应用程序,我通常使用一些并不真正属于任何特定对象的额外函数.主要是数据操作.我希望这些功能在我的应用程序中可用,既可用于CFM模板,也可用于应用程序实例化的CFC.

我看到它的方式有各种方法来实现这一点,但它们都有自己的局限性:

  1. 在应用程序范围中实例化基本Utils CFC.这是我经常使用的方法.所有的功能都可以在应用程序范围内使用,但如果我从多个应用程序实例化相同的CFC,那么它们每个都有自己的应用程序范围 - 这意味着每个都必须实例化自己的基础Utils CFC.这没有什么不对,但感觉我没有足够好地封装CFC.我并不热衷于从CFC中引用应用程序范围.

  2. 创建一个基础Utils CFC并使其他所有CFC扩展它.这样可以正常工作,这意味着CFC可以直接从CFC的THIS范围引用Utils功能 - 但这意味着Utils功能保存在每个CFC的内存中.它在概念上也不合适,因为我的其他CFC与Utils CFC没有任何关系.

  3. 将我的基础Utils CFC注入我的其他CFC.我一直在玩的另一种方法是在Application范围中实例化我的基础Utils CFC,然后将其作为对象传递给我的其他CFC中的参数.这在概念上和我的封装中都适用.与我在init方法中设置数据源的方式相同,我可以对UDF执行相同的操作.这与UDF包含在每个CFC中的问题相同.当我转储所有的CFC时,我多次得到每个UDF - 但是当我传递一个实例化的对象时,我假设它没有占用任何额外的内存空间.如果有人能证实这一点,那会很有帮助 - 我只是假设!我对这种方法唯一真正的问题是它似乎有点复杂.

  4. 让我的应用程序CFC扩展我的Utils CFC.这就是许多框架似乎要做的事情.我没有使用过这种方法,但我确信它有利有弊.

  5. CF直接在Application.cfc中从单独的模板中包含我的UDF这在功能上类似于在Application范围中实例化.

  6. 将我的UDF添加到服务器中Components.cfc 这是一个理论上的好主意 - 我可以维护基本Utils的一个副本,并确保服务器上的所有内容都可以访问它们 - 但是,如果我想在多个服务器上运行应用程序,那么它们都将全部需要那些功能.此外,对服务器的任何更新都可能会覆盖组件.它只是感觉像黑客核心 - 我敢肯定我们可以从苦涩的经历中得到所有,这很糟糕.

所以 - 我的问题是:以优雅和可重用的方式扩展CF与UDF的最佳实践是什么?以上任何选项或我没想过的东西?

coldfusion cfc railo cfml

11
推荐指数
1
解决办法
458
查看次数

ColdFusion Server CFC缓存问题

我在我的笔记本电脑上使用自己的ColdFusion 8服务器开发了coldFusion应用程序,该服务器在Windows Vista上运行.我有一个相当讨厌的问题.

问题是每当我对我的CFC进行任何更改时,看起来除非我重新启动我的ColdFusion应用程序服务器,否则对我的CFC的更改将不会生效.通常,我必须重新启动整个计算机,因为Windows无法重新启动ColdFusion Application Server服务.有没有更好的方法来重置ColdFusion服务器的cfc缓存?

这种情况开始耗费大量时间,因为我必须经常在我做出改变后重新开始.任何见解将不胜感激!

谢谢!

coldfusion caching cfc

10
推荐指数
1
解决办法
1万
查看次数

找出谁在调用方法

我想以某种方式找出哪个CFC正在调用我的方法.

我有一个记录CFC,由许多不同的CFC调用.在此日志记录CFC上,需要存储调用日志的CFC.

虽然我可以简单地将CFC名称作为参数传递给我的log.cfc,但我发现这是一个重复性的任务,如果我能以某种方式找出"谁在"log.cfc上调用该方法,那么这可能没有必要.

有没有任何程序化的方法来实现这一目标?

提前致谢

methods coldfusion cfc

10
推荐指数
1
解决办法
3005
查看次数

标签 统计

cfc ×10

coldfusion ×10

cfml ×3

application.cfc ×1

caching ×1

java ×1

mapping ×1

methods ×1

oop ×1

railo ×1