带有可选子项的表单提交和验证

时间:2016-06-04 03:40:33

标签: symfony-forms symfony

我认为我在验证,一对一关系和部分表单提交方面存在问题。

以下是该方案:

我有以下实体:

  • Opportunity
  • Deal
  • PaymentPreferences

具有以下关系:

  • Opportunity有一个Deal
  • Opportunity有一个PaymentPreferences

我还有以下表格来匹配实体关系:

  • OpportunityType有孩子DealTypePaymentPreferencesType

在这里,它变得棘手......

  • Opportunity->paymentPreferences是可选的
  • 如果Opportunity->paymentPreferences不为空,则PaymentPreferences具有必需属性:numberOfPayments

我需要:

  • 创建一个API,其中Opportunity可以使用Deal提交,但不能PaymentPreferences
  • 创建可以添加PaymentPreferences的前端表单

因此...

从API方面来说,我认为可以使用表单上的事件监听器来解决这个问题。如果提交的数据中没有PaymentPreference,请不要将PaymentPreferencesType添加到OpportunityType表单。听起来不错?

在前端,我认为我需要某种按钮来添加付款偏好"。我不确定这是正确的方法还是我将如何添加它。如果这是一对多关系,我可以使用带有allow_add和allow_remove的CollectionType

我正在运行Symfony3。

1 个答案:

答案 0 :(得分:0)

也许你可以这样做:

  • 始终将子表单PaymentPreferencesType添加到主表单。
  • 添加字段"有效"到您的实体PaymentPreferences
  • 在正面,使用按钮或复选框,允许用户显示或隐藏PaymentPreferences的字段,(当子窗体被隐藏时,不要忘记重置字段-ie。{ {1}})

然后在您的实体$('#paymentPreferences_numberOfPayments').val('').中,而不是在numberOfPayments字段上使用nullable = false,只需使用类似

的内容
PaymentPreferences