如何在MVC中的2个控制器/模型(CFWheels)上处理1表单?
我是一位老的CFML开发人员,一般都是轮子上的CF和MVC编程的新手。我很快选择它,但有一点对我来说并不明显,那就是如何提供一个表单来选择更新多个数据库表记录(模型)。我特别想为用户信息和用户资料信息设置一个选项卡式表单,其中前者是必需的,而后者不是。这些数据存储在两个不同的一对一表中。为了调用两个“新”或“编辑”视图,需要什么设置,运行2个“创建”或“更新”过程,影响两个不同的表。或者我想这一切都是错误的。如何在MVC中的2个控制器/模型(CFWheels)上处理1表单?
更新:添加一些我想要做的更多信息。为了简单起见,我会坚持2个选项卡和2个表格,尽管在这个例子中我真的至少要看3个表格。
所以我有一个Users表和一个UserProfiles表,我有一个名为User.cfc和UserProfile.cfc的模型,这些模型是1对1相关的,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新手提前...
布赖恩
如果所有数据通过hasMany
或hasOne
关联关联,我建议查看嵌套属性。
http://cfwheels.org/docs/1-1/chapter/nested-properties
如果你是一个新手,不过,你可能想从这个不要,直到你已经得到的东西简单的解决。
我想你说的代表这两个表约两款车型,可能使用hasOne有关。型号允许你validate data,这使得控制器更简单。这样,您可以在两个选项卡下创建两个forms,并将记录的主键保留为隐藏字段。控制器可以运行验证并重新显示表格(partials可能有帮助)...坚持下去,我只是通过reference。
我意识到这个答案是非常通用的,以及你的问题。我建议你继续尝试一下,看看它是如何工作的。
之后,用代码示例更新您的问题,并询问您是否有一些具体问题。例如,CFWheels中的验证和显示错误可能有点棘手。
感谢您输入Sergii。说我太模糊了,这当然很公平。我一直在尝试几种方法,但在我甚至可以运行任何代码之前,我一直在遇到明显的障碍。让我看看我是否可以更具体。我是一个Users表,一个UserProfiles表和一个UserSettings表,都是一对一的。每个用户都有一个记录。这不是绝对必要的分解,但有几个原因我更喜欢它。 –
我想要做的是让这些表单中的任何一个具有单独的控制器,一个单独的视图和一个单独的模型,但也要全部完成 - 至少对于更新操作 - 一次完成。因此,用户点击“主要”选项卡或“配置文件”选项卡或“设置”选项卡,并可以在每个选项卡中更改他们的信息,但一次“全部”保存,所以我想我需要打电话给所有3将()操作保存在一个地方。但我无法弄清楚结构或序列。是的,我已经在表单中使用partials,但最难的部分是如何有条件地或同时提交给所有3个更新操作... –
谢谢Chris。我设法从不完美的方式来解决这个问题,现在我回过头来,使用嵌套属性。对我来说主要障碍是概念上的:在MVC中,它似乎是一个视图,一个控制器,但可能有多个模型由一个控制器处理。所以只要我的控制器和视图一致,我就可以使用它们与多个模型进行交互和显示。凉! –