当前位置 : 主页 > 网页制作 > HTTP/TCP >

url – 如果将其名称用作查询列,如何访问范围

来源:互联网 收集:自由互联 发布时间:2021-06-16
处理一些遗留代码我们遇到了一个相当恼人的情况.我们使用 cfoutput query =“x”循环查询查询标签.该查询有一个名为“url”的列.在该循环中,我们需要检查url范围内是否存在密钥.由于C
处理一些遗留代码我们遇到了一个相当恼人的情况.我们使用< cfoutput query =“x”>循环查询查询标签.该查询有一个名为“url”的列.在该循环中,我们需要检查url范围内是否存在密钥.由于CF优先考虑一般页面范围内的查询内容,因此我不能使用structKeyExists(url,“key”),因为就此而言CF而言,url是一个字符串,其值来自当前行的查询.

如何突破查询范围并检查我的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()和其他范围的类似命名的函数.

网友评论