使用CFPARAM的战略/建议

时间:2010-01-07 14:21:21

标签: coldfusion

每次使用cfparam时,我都有一种感觉,我把它放在错误的地方或一般误用。

考虑这个例子,假设我们需要显示新的实体形式(使用默认输入值):

<cfparam name="form.attachLink" default="" />
<input type="text" name="attachLink" value="#HTMLEditFormat(form.attachLink)#" />

即便是这个简单的让我想到关于 cfparam 的问题:

  1. 我应该在确切的使用地点之前使用它吗?它不打破模型/视图的想法吗?
  2. 或者我应该将它们分组到模型模板​​中,还是放在视图之上?
  3. 当paramin' form 数据时,也许最好使用StructKeyExists(表单,“attachLink”)?当然,我在处理提交的表格时这样做(加上验证),但对于新形式,这也是有用的 - 对于像我这样的安全偏执的人。
  4. 使用此标签还有什么意义吗?我知道一个非常有用的地方:自定义标签,尽管它们本身也变得越来越传统。
  5. 感谢。

3 个答案:

答案 0 :(得分:2)

冒着听起来无益的风险:“这取决于。”

我认为CFPARAM可以用于设置默认值以及验证变量类型并在不匹配时抛出错误,这有点复杂。也就是说,我几乎总是只为前者使用它。对于后者,很多内容已经被组件的参数所包含。

其中一个更有用的用法是在带有复选框的表单的操作页面上。

<cfparam name="form.myCheckbox" default="" />

由于它无法在表单上检查任何复选框,因此这使我无需创建特殊验证,以便在使用之前查看表单变量是否存在,因为我几乎总是将其视为列表,空字符串对列表函数仍然有效。

至于放置它们的位置,当我使用它们时,我几乎总是将它们放在cfm文件的顶部,但这可能只是一种风格。如果你把它们洒在你的代码中,我想你会遇到变量将被设置的情况,你不知道它发生在哪里。

当然,我现在几乎只使用Model-Glue。对CFPARAM没用多少。

答案 1 :(得分:0)

如果要在表单值中引用变量,则应使用具有合理默认值(甚至为空白)的cfparam以确保该变量存在。但是,如果仅在表单处理时引用该变量,我将跳过cfparam(因为您没有在表单中设置值而不必要),而是在表单处理步骤中使用structKeyExists(scope,“key”)。

在MVC框架中,您可以选择以其他方式设置默认值。在这种情况下,您很可能不直接引用表单范围,而是引用框架管理范围。 Fusebox使用“事件”范围。在页面加载时,Fusebox框架将URL和FORM范围合并到EVENT范围中。如果您担心“打破MVC”,我建议您在显示表单之前,在MVC控制器中使用框架的范围(在我的案例中为EVENT)设置和/或测试必要的变量(使用框架的推荐方法)风景。很可能你不需要cfparam。

答案 2 :(得分:0)

我认为cfparam与我对变量声明的看法相同。我总是声明我的变量尽可能接近我要使用变量的地方。在coldfusion世界中,我在cfform标记之前使用cfparam标记。

听起来你正在使用MVC框架。我不知道这会如何影响cfparam的使用。该模型是您获取数据的地方。 CFParam并不特定于该模型。