爱德华等人,我在下面的帖子中提到了您的评论。见https://gregoryalexander.com/blog/2021/1/30/Extending-Applicationcfcs-using-mappings-and-proxies
您绝对可以使用映射扩展 cfc。我必须自己做。
我在 ColdFusion 中必须处理的最令人沮丧的事情之一是尝试创建一个对公众开放的外部应用程序,并且必须使用子文件夹中的应用程序来保护该站点的一部分并从基础扩展逻辑应用程序.cfc。我将向您介绍开发人员用来解决此问题的当前方法,并向您展示如何在可能存在使用虚拟目录的托管服务提供商时额外使用映射。
这是一篇相当长的文章,如果您想跳转到精简摘要,请向下滚动到本页底部。
很多年前,我第一次尝试执行此操作时,无论尝试什么都收到以下消息:“找不到 ColdFusion 组件或接口 xxx”。简而言之,使用这种方法的问题是root和子文件夹同名,即Application.cfc,ColdFusion无法正确识别要扩展什么组件,最后经过一番认真的调查,有人想出了一个想法,创建一个proxy.cfc,驻留在同一个目录下根目录作为根 Application.cfc,子文件夹中的 Application.cfc 扩展了一个空的 proxy.cfc,该 proxy.cfc 扩展了根 cfc,如下所示:
根目录:Application.cfc 这个根 Application.cfc 没有扩展任何东西
同样在根目录中: Proxy.cfc Proxy.cfc 有以下代码,它本质上是空的。Proxy.cfc 唯一要做的就是扩展同一目录中的 Application.cfc:
子目录,例如名为 admin 的文件夹。此子目录有另一个 Application.cfc。假设这个组件负责保护应用程序并具有登录逻辑和调试设置等功能。此 Application.cfc 将扩展 Proxy.cfc 以获得根目录中 Application.cfc 的方法和属性,如下所示:
这种方法是天赐之物,并且在博客上广为流传。Ben Nadel 发表了许多非常有用的帖子,我将在本文底部分享这些帖子。
除非您在托管域或使用虚拟目录的服务器上,否则这非常有效。在这种情况下,我们是在我们开始的同一条船上。现在我们又回到了“找不到 ColdFusion 组件或接口 xxx”的地狱!
虽然这个棘手的问题有一个解决方案,但我们还需要使用映射!
不能使用映射来扩展组件是一个常见的误称。我不太确定这种误解最初是从哪里来的,但事实证明这是不正确的。在某些情况下,我们必须使用映射来解决一些烦人的问题,比如这里。
该特定站点由 hostek.com 托管。他们是一家很好的公司,但是由于目录结构,我的网站所在的服务器有一些特点。在这里,当我使用 Proxy.cfc 方法将逻辑从基本 Application.cfc 扩展到管理文件夹中的 Application.cfc 时,我收到可怕的“找不到...组件”错误。当我第一次看到它时,我很沮丧,不再想这个,所以我转向了 ColdFusion CFC 映射。映射告诉 ColdFusion 在哪里可以找到文件以及文件关系是什么。
让我们回顾一下刚才讨论的 CFC 结构。例如,想象以下目录结构:
根目录:即www.gregoryalexander.com/
子目录:www.gregoryalexander.com/admin/
如前所述,我们在根目录中有 Application.cfc 和 Proxy.cfc,在“admin”子目录中有 Application.cfc。Proxy.cfc 扩展了也在根目录中的 Application.cfc,并且子目录 (admin) 中的 Application.cfc 扩展了根目录中的 Proxy.cfc。
根目录:包含 Application.cfc 和 Proxy.cfc(扩展了根 Application.cfc)。子目录:Application.cfc(扩展 Proxy.cfc)。
现在我们还需要在根 Application.cfc 中添加以下映射。此映射逻辑应靠近根 Application.cfc 的顶部,并且不应位于任何 Application.cfc 事件处理程序(onApplicationStart、onApplicationRequest 等)中。此映射代码不需要位于根 Application.cfc 以外的任何其他位置:
我使用 rootCfc 来识别根目录中的 Application.cfc,而 adminCfc 适用于 admin 目录中的 Application。这些变量可以任意命名。请注意,adminCfc 映射末尾的“/admin”字符串指向“admin”文件夹,该文件夹是一个子目录。
现在我们在根 Application.cfc 中有映射,我们需要将它们应用到位于子目录的 Application.cfc 中的 extends 语句。在 /admin/Application.cfc 模板中使用:
/admin/Application.cfc
当然,rootCfc 告诉子目录中的 Application.cfc 在根目录中查找 Proxy.cfc 模板。与其他“扩展”语句一样,您无需在 Proxy 末尾指定“.cfc”。
您不需要在根 Proxy.cfc 或 Application.cfc 模板中使用此“扩展”映射。他们已经可以找到彼此,因为他们都在同一个根目录中。
/代理.cfc
总结 为了绝对清楚起见: root Application.cfc 包含映射逻辑。具有根目录和子目录的映射。不使用“扩展”语句
root Proxy.cfm 一个简单的 'extends="Administrator" 就可以了。没有映射逻辑。
子目录 Application.cfc extends 语句必须是文件夹的映射变量名称(rootCfc),一个点(.),最后是不带 .cfc 前缀的 Proxy.cfc 模板名称(Proxy)
我很抱歉如此冗长。我在写这篇文章时让自己很恼火——但在我试图解决这个问题时却没有那么恼火!
小心!