【发布时间】:2015-09-26 03:25:30
【问题描述】:
Symfony 2 表单组件真的很重要。我想你知道这一点。试图了解什么是有效的,这似乎是一项不可能完成的任务;而且我在浏览代码库方面很有经验。但是,伙计,表单组件.. OMG
TL;DR
以下是详细内容,本期试问
- 是否可以替换类
\Symfony\Component\Form\Form? - 或者:如何轻松地从表单的所有表单类型字段中获取所有额外数据?
- 或者,一个相关的问题:如果我这样做
$form->add('ss', 'form'),它到底是如何工作的 - 显然Core\FormType类涉及但当我稍后检索它时,它是\Symfony\Component\Form\Form的一个实例?这是在哪里发生的,这可能会被覆盖,因此它在那里使用不同的类吗?
详情
情况
想象一个控制器接收一个深度 JSON 负载。此有效负载通过 Form 进行解码和验证。现在,这个 JSON 结构的大部分都由模型(Doctrine ODM 实体)映射。但是一些子属性只是“哈希” - 允许客户在那里发布他想要的任何内容。
那些“散列”子属性是表单类型的字段,带有复合标记并且可以有额外的字段。
问题
我们的问题是,$form->getData() 没有返回所有“额外字段”。我们无法指定这些字段(及其类型),因为我们不知道会发生什么 - 所以所有这些数据都是 extraData 的一部分。
解决方案?
所以我想 - 好的 - 让我们修改 FormFactory,让它返回我们的自定义扩展 Form - 当 getData 被调用时它也返回 extraData。容易吧。?不,不容易..
我的想法是让我检查 FormFactory、FormBuilders、ResolvedFormTypes、whatnot.. 以及所有重要的地方(如 formBuilder->getForm()) - 我要覆盖/替换的类是实例化的静态类 - 不使用 DIC.. (!)
【问题讨论】:
标签: php json forms rest symfony