每次使用cfparam时,我都有一种感觉,我把它放在错误的地方或一般误用。
考虑这个例子,假设我们需要显示新的实体形式(使用默认输入值):
<cfparam name="form.attachLink" default="" />
<input type="text" name="attachLink" value="#HTMLEditFormat(form.attachLink)#" />
即便是这个简单的让我想到关于 cfparam 的问题:
感谢。
答案 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并不特定于该模型。