我是新手,还在学习。在我看来,表单的每个帖子都需要调用映射到特定模型中的方法的操作。但是,表单是否可以发布到自身?
我想要避免的是人们直接导航到动作视图 - 这似乎会引发错误。我也想做很多自我发布,因为这可能意味着我的视图文件夹中不会有很多空文件。
我想到的另一个好处是,如果一个表单是自我发布的,我可以将其全局使用。例如,我的标题中可能有一个表单,我希望我的用户可以在网站的任何位置填写。或者有没有办法检测用户来自何处并进行动态重定向?
非常感谢, 迈克尔。
答案 0 :(得分:2)
以下是车轮文档“Wheels, Ajax and You”的链接。该部分有一些不错的东西,它可能就是你在这里寻找的东西!
答案 1 :(得分:2)
为避免因用户浏览post
操作而导致的错误,请查看验证:
http://cfwheels.org/docs/chapter/verification
因此,您的create
和update
操作将在控制器的init
中进行如下配置:
<cffunction name="init">
<cfset verifies(only="create,update", post=true, params="comment", paramsTypes="struct")>
</cffunction>
在表单发布后将用户重定向回上一页并不是不合理的。查看redirectTo(back=true)
您的成功行动。
http://cfwheels.org/docs/1-1/function/redirectto
<cffunction name="init">
<cfscript>
verifies(only="create,update", params="comment", paramsTypes="struct");
provides("html,json");
</cfscript>
</cffunction>
<cffunction name="create">
<cfscript>
comment = model("comment").new(params.comment);
comment.save();
if (isAjax())
{
renderWith(comment);
}
else
{
if (comment.hasErrors())
redirectTo(back=true, error="There was an error saving the comment.");
else
redirectTo(back=true, success="The comment was posted successfully.");
}
</cfscript>
</cffunction>
是的,我喜欢Craig的答案,AJAX是一个很好的解决方案,但你还需要考虑如果AJAX失败并且表单最终通过非AJAX请求发布到URL会发生什么。最好提供完全无障碍的体验。
答案 2 :(得分:1)
我对Wheels的了解很少,它是一个受Ruby on Rails启发的自以为是的MVC框架。您正在通过将表单发布到自身并绕过控制器来请求有关避免模型 - 视图 - 控制器模式的帮助。在这样的框架中,这是不可能的,或者至少是不鼓励的。
一个好的MVC框架应该允许您在全局范围内重用您的模型,视图,在某些情况下甚至是控制器。