Model view controller CFWheels-如何拥有表单自发布?

Model view controller CFWheels-如何拥有表单自发布?,model-view-controller,coldfusion,railo,cfwheels,Model View Controller,Coldfusion,Railo,Cfwheels,我是新手,还在学习。在我看来,表单的每个帖子都需要调用映射到特定模型中方法的操作。但是,表单是否可以发布到自身 我想要避免的是人们直接导航到动作视图——这似乎会抛出一个错误。我还想做很多自我发布,因为这可能意味着我不必在我的视图文件夹中放置很多空文件 我考虑的另一个优点是,如果一个表单是自发布的,我就可以在全球范围内使用它。例如,我的标题中可能有一个表单,我希望我的用户在网站的任何地方填写。或者,是否有一种方法可以检测用户来自何处并进行动态重定向 非常感谢,, Michael。我对Wheels知

我是新手,还在学习。在我看来,表单的每个帖子都需要调用映射到特定模型中方法的操作。但是,表单是否可以发布到自身

我想要避免的是人们直接导航到动作视图——这似乎会抛出一个错误。我还想做很多自我发布,因为这可能意味着我不必在我的视图文件夹中放置很多空文件

我考虑的另一个优点是,如果一个表单是自发布的,我就可以在全球范围内使用它。例如,我的标题中可能有一个表单,我希望我的用户在网站的任何地方填写。或者,是否有一种方法可以检测用户来自何处并进行动态重定向

非常感谢,,
Michael。

我对Wheels知之甚少的是,它是一个受Ruby on Rails启发的固执己见的MVC框架。您正在请求帮助,通过将表单post发送到自身并绕过控制器来避免模型视图控制器模式。在这样一个框架内,这是不可能的,至少是不应该被阻止的


一个好的MVC框架应该允许你重用你的模型、视图,甚至在某些情况下,甚至是全局控制器。

< P>米迦勒,你可能想考虑制作一个类似Ajax的窗体。换句话说,您可以让它使用jQuery或类似工具将表单数据提交给远程CFC方法(即,其访问属性设置为“remote”的方法)。该CFC可以按照通常的方式发挥其魔力,并返回您认为合适的响应


这里有一个指向“轮子文档”的链接。那部分有一些不错的东西,可能就是你在这里要找的

为避免用户浏览
发布
操作时出现错误,请查看验证:

因此,您的
创建
更新
操作将在控制器的
init
中进行如下配置:

<cffunction name="init">
    <cfset verifies(only="create,update", post=true, params="comment", paramsTypes="struct")>
</cffunction>

是的,我喜欢克雷格的回答,Ajax是一个很好的解决方案,但是你也需要考虑如果AJAX失败,并且表单最终通过非Ajax请求发布到URL会发生什么。最好是提供完全可访问的体验。

克里斯,这是一个很好的观点。感谢您将其添加到线程中!没问题。添加更多编辑。第一次在示例上可以不那么懒惰。好吧,这是一种享受,作为奖励,我现在也不需要空的视图模板…这解决了我遇到的另一个主要问题-对我来说似乎是多余的。你自己和克雷格帮了大忙……克雷格确实得到了答案,但我把它改成了你,因为它似乎更直接地回答了我最初的问题。谢谢你们两个!verifys()方法正是我想要的特性,你们两位都向我展示了一个非常出色的AJAX路线。
<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>