“如何处理选择”;其他";是否以Symfony2形式在EntityChoiceList中?
我有一个模型,如下所述: 我还有一个表单,可以创建一个新产品,其中包含一个字段“如何处理选择”;其他";是否以Symfony2形式在EntityChoiceList中?,symfony,symfony-forms,Symfony,Symfony Forms,我有一个模型,如下所述: 我还有一个表单,可以创建一个新产品,其中包含一个字段entity,用于构建一个包含所有品牌的下拉列表 现在,我想在此列表中添加一个值“Other”,以便允许用户在另一个文本字段中手动指定品牌 问题是:是否有一种干净的方法来管理Symfony2表单的这种情况(例如,在列表中添加值“Other”,它不是一个实体并使表单验证生效)?您可以通过两种方法来实现 您可以订阅FormEvents::BIND_CLIENT_DATAformevent。在事件方法中,您可以从文本中创
entity
,用于构建一个包含所有品牌的下拉列表
现在,我想在此列表中添加一个值“Other”,以便允许用户在另一个文本字段中手动指定品牌
问题是:是否有一种干净的方法来管理Symfony2表单的这种情况(例如,在列表中添加值“Other”,它不是一个实体并使表单验证生效)?您可以通过两种方法来实现
- 您可以订阅
formevent。在事件方法中,您可以从文本中创建新的FormEvents::BIND_CLIENT_DATA
对象,保存它并通过调用品牌
将id设置为表单。参见食谱条目$event->setData($data)
- 您可以附加一个数据转换器。在其
方法中,您可以创建并保存对象并返回其id。请参阅cookbook条目reverseTransform
FormEvents::BIND_CLIENT_DATA
事件侦听器对提交的数据进行操作。在任何数据映射发生之前。您可以只检查字段值是否为数字。如果没有,您可以保存实体并将其id设置为提交的数据。我想您不理解我的问题。我对它进行了编辑,以便更容易理解。我想逐字地将值“Other”添加到列表中,它不是一个实体,我不希望它被持久化。我已经了解了如何使用集合和“允许添加”选项动态添加新品牌(顺便说一句,FormEvents::BIND_CLIENT_DATA从2.1开始就不推荐使用,您应该改用PRE_BIND。请参阅)。我的问题是,我不知道如何处理列表中的“非实体”值,以及当表单返回时如何验证它。不过,感谢您的反馈。:)