Coldfusion CFWheels:在重定向到而不是渲染页上显示表单错误
我有一个表单,我正在使用CFWheels模型验证和表单帮助程序进行验证 控制器中index()操作/视图的我的代码:Coldfusion CFWheels:在重定向到而不是渲染页上显示表单错误,coldfusion,cfwheels,Coldfusion,Cfwheels,我有一个表单,我正在使用CFWheels模型验证和表单帮助程序进行验证 控制器中index()操作/视图的我的代码: public function index() { title = "Home"; forms = model("forms"); allforms = model("forms").findAll(order="id ASC"); } #startFormTag(controller="form", action="init_form")# &
public function index()
{
title = "Home";
forms = model("forms");
allforms = model("forms").findAll(order="id ASC");
}
#startFormTag(controller="form", action="init_form")#
<select class="form-control">
<option value="">Please select Form</option>
<cfloop query="allforms">
<option value="#allforms.id#">#allforms.name#</option>
</cfloop>
</select>
<input type="text" name="forms[name]" value="#forms.name#">
#errorMessageOn(objectName="forms", property="name")#
<button type="submit">Submit</button>
#endFormTag()#
从上面的代码中可以看到,我正在验证表单字段的值,如果有任何错误,它将发送到原始索引页。我的问题是,由于我正在呈现页面,我还必须重新键入页面所需的其他变量,如本例中的下拉列表中的“allforms”
有没有办法不输入这样的变量?如果我使用redirectTo()而不是renderPage(),那么不会显示错误?为什么呢
为了清楚起见,我想将页面发送/重定向到原始表单并显示错误消息,但我不想键入呈现该页面所需的其他变量?有办法吗
如果您需要更多说明,请告诉我。这似乎有点离题,但我猜这是一个问题,表单使用一个控制器(
new
)呈现,使用另一个控制器(create
)处理,或者在更新的情况下,使用edit
渲染,使用update
处理表单
我会争辩,等等。。。cfWheels路由的完成方式留下了一些改进的空间。您可以看到,在许多不同框架的路由组件中,您可以为POST
指定不同于GET
的控制器功能。使用cfWheels,所有调用都是基于url处理的,因此如果您使用相同的url,则GET
和POST
将由相同的控制器处理(如表单操作留空时)
这是cfwheels所做的交互:
虽然可以改变它的工作方式,但您会发现文档和教程似乎更喜欢这种方式
TL;博士强>
可用的解决方法是让表单由相同的控制器函数(route)进行渲染(GET:new,edit)和处理(POST:create,update)。在功能中
- 检查用户是否使用
POST
- 如果是
,则运行处理表单的私有函数(即POST
)handle\u create()
- 在
函数中,您可以设置所有错误检查并创建错误handle\u create()
- 如果函数没有错误,则创建(或更新)模型并可选地重定向到成功页面
- 否则返回错误的对象/数组
- 如果是
- 使结果错误对象/数组可供查看
- 处理表单创建
flashInsert(error="This is an error message.");
这符合你的观点
<cfif flashKeyExists("error")>
<p class="errorMessage">
#flash("error")#
</p>
</cfif>
#闪光(“错误”)#
为什么不刷新控制盘的消息功能以显示错误消息?如何传递我在模型中定义的自动生成错误?如果我使用flash,那么我必须编写自己的验证代码并传递自己的验证消息。我想使用CFWheels功能生成服务器端错误。但接下来的问题是如何将错误作为参数传递?甚至触发重定向页面上的错误。
<cfif flashKeyExists("error")>
<p class="errorMessage">
#flash("error")#
</p>
</cfif>