如何突破查询范围并检查我的URL中的内容?
作为临时我们正在使用isDefined(“url.key”),但我仍然想知道是否有办法打破查询范围.
也无法真正更改列,甚至是查询中的列名,而没有几个小时的工作来跟踪更改对它的所有引用,所以我们将尽可能避免这种情况.
编辑:
关于如何设置此代码以及为什么简单的解决方案不适用,似乎存在一些混淆.我很难给出一个彻底的例子,但我会尽力澄清情况.
对于以下示例,有许多页面将被视为“pageA”.足以改变事物的运作方式需要及时改变范围和投资,而这在时间上是不会发生的.
PageA运行一个查询,其中一个列名为url,然后通过cfoutput启动输出循环,在该循环内包含PageB.一个PageA可能在URL范围中具有与另一个PageA不同的变量,实际上它们是相同的,但可以以不同的方式命名(varID = x在一种情况下vid = x在另一种情况下).在PageB内部我需要使用该url作用域中的值,所以我想运行不同的可能名称(如果url中存在键’varID’,请使用它,否则使用’vid’).
这就是为什么我要“穿透”查询范围以获取url结构,而不是查询中的url列.任何其他方法似乎都需要修改许多PageA.
所以问题不在于如何具体解决这个问题,因为有很多方法可以做到这一点,我真的很想避免它们,因为它们都会在实现和测试中增加大量时间.问题仍然存在,如果url作为查询列存在且您在查询范围内,是否有一种方法可以将url范围作为变量访问.
我认为创建一个返回url范围的函数可能会有效,但是在测试它时,即使使用本地范围的查询(这会阻止函数使用查询本身),在函数内使用url仍然会被破坏:<cffunction name="getUrlScope"><cfreturn Url /></cffunction> ... <cfoutput query="x"> <cfif StructKeyExists( getUrlScope() , 'key' )> <!--- still fails :( --->
然而,有一个无证(意思是不支持和可能改变)选项.如果你转储getPageContext(),你会看到一堆做有趣事情的函数,包括处理范围.
您可以使用getPageContext().SymTab_findBuiltinScope(‘URL’)来获取URL范围.
您还可以使用getPageContext().getCfScopes()来获取范围数组.我不确定订单是否有保证是固定的,但似乎是[cgi,?,url,form,cookie,?]检查CF10和cflive(CF9),所以可能是.
(在CF8中有the method getBuiltinScopes,返回结构而不是数组 – 这似乎不再存在,加强了这些方法的整体不受支持和可变的性质.)
在Railo上那些不起作用,但是getPageContext.UrlScope()和其他范围的类似命名的函数.