【问题标题】:How to process 1 form across 2 controllers/models in MVC (CFWheels)?如何在 MVC(CFWheels)中跨 2 个控制器/模型处理 1 个表单?
【发布时间】:2012-06-13 19:32:41
【问题描述】:

我是一名资深的 CFML 开发人员,对 CF on Wheels 和 MVC 编程很陌生。我很快就学会了,但对我来说并不明显的一件事是如何提供一个表单来选择性地更新多个数据库表记录(模型)。我特别想为用户信息和用户配置文件信息设置一个选项卡式表单,前者是必需的,后者不是。此数据存储在两个不同的一对一表中。为了调用两个“新”或“编辑”视图,运行 2 个“创建”或“更新”过程,影响两个不同的表,我需要什么设置。还是我认为这一切都错了。

更新:添加更多关于我正在尝试做的事情的信息。为简单起见,我将坚持使用 2 个选项卡和 2 个表格,尽管在这种情况下我真的至少要查看 3 个。

所以我有一个 Users 表和一个 UserProfiles 表,我有一个名为 User.cfc 和 UserProfile.cfc 的模型,它们是一对一相关的,而 UserProfile 依赖于 User。很标准的东西。对于每个我都有控制器:Users.cfc 和 UserProfiles.cfc,每个都包含操作。添加、编辑、创建、更新、做显而易见的事情(添加和编辑显示表单)。我有部分显示每个的添加/编辑表单字段,所以已经准备好了。现在,我想创建一个有效的添加/编辑表单,可以同时更新两个表。标签并不重要。实际上它可能都在一个页面上。

所以从概念上讲,我正在做类似的事情:

#startFormTag(action=???)#
#includePartial("form_user_add-edit")#
#includePartial("form_userprofile_add-edit")#
<button type="submit" class="btn">#operation#</button>
#endFormTag()#

我是否需要创建一个单独的控制器操作,它基本上结合了两个不同控制器的创建和更新操作?

在此先感谢一位高兴且热心的 CFWheels 新手...

布赖恩

【问题讨论】:

    标签: model-view-controller coldfusion cfwheels


    【解决方案1】:

    如果所有数据都通过hasManyhasOne 关联关联,我建议查看嵌套属性。

    http://cfwheels.org/docs/1-1/chapter/nested-properties

    不过,如果您是新手,则可能要避免这样做,直到您解决了一些更简单的问题。

    【讨论】:

    • 谢谢克里斯。我设法以不完美的方式解决了这个问题,现在我要回过头来使用嵌套属性。对我来说主要的障碍是概念上的:似乎在 MVC 中,它是一个视图、一个控制器,但可能由一个控制器处理多个模型。因此,只要我的控制器和视图对齐,我就可以使用它们与多个模型进行交互和显示。酷!
    【解决方案2】:

    我猜你说的是代表这两个表的两个模型,可能使用hasOne 关联。模型允许您validate data,这使控制器更简单。这样,您可以在两个选项卡下创建两个forms,并将记录的主键保留为隐藏字段。控制器可以运行验证并重新显示表单(partials 可能会有所帮助)...等等,我只是通过reference

    我意识到这个答案和您的问题一样非常笼统。我建议你继续尝试一些东西,看看它是如何工作的。

    之后,使用代码示例更新您的问题,并询问您是否有一些具体问题。例如,在 CFWheels 中验证和显示错误可能有点棘手。

    【讨论】:

    • 感谢您的意见,Sergii。说我太含糊了,这当然是公平的。我一直在尝试几种方法,但在我运行任何代码之前,我一直遇到明显的障碍。让我看看我是否可以更具体。我是一个用户表和一个用户配置文件表和一个用户设置表,都是一对一的。每个用户都有一个记录。这不是绝对需要分解的,但出于几个原因,我真的更喜欢它。
    • 我想要做的是让这些表单中的任何一个都有一个单独的控制器和一个单独的视图和一个单独的模型,但也都完成了——至少对于更新操作—— - 一次全部。因此,用户单击“主要”选项卡或“配置文件”选项卡或“设置”选项卡,可以更改每个选项卡中的信息,但一次“保存”所有信息,所以我想我需要调用所有 3 save() 动作在一个地方。但我无法弄清楚结构或序列。是的,我已经在表单中使用了部分,但困难的部分是如何有条件地或同时提交给所有 3 个更新操作......
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2015-06-26
    • 2013-02-07
    • 2014-07-04
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多