php – 嵌套的Symfony2表单:$options [‘data’] =嵌套形式的nu
发布时间:2020-12-13 16:46:08 所属栏目:PHP教程 来源:网络整理
导读:由于围绕这个主题的文档有点薄,我走到了尽头. 我有两个模型:Job和JobAttribute. Job有许多JobAttributes,JobAttribute有一个Job: class Job { /** * @ORMOneToMany(targetEntity="JobAttribute",mappedBy="job_attributes") * * @var ArrayCollection */
由于围绕这个主题的文档有点薄,我走到了尽头.
我有两个模型:Job和JobAttribute. class Job { /** * @ORMOneToMany(targetEntity="JobAttribute",mappedBy="job_attributes") * * @var ArrayCollection */ private $attributes; } class JobAttribute { /** * @ORMColumn(name="type",type="string",length=50) * * @var string */ private $type; /** * @ORMManyToOne(targetEntity="Job",inversedBy="jobs") */ private $job; 现在,我有以下FormClass: class JobType extends AbstractType { public function buildForm(FormBuilder $f,array $options) { $f->add('name','text'); $f->add('attributes','collection',array('type' => new JobAttributeType())); } public function getName() { return 'job'; } } class JobAttributeType extends AbstractType { public function buildForm(FormBuilder $f,array $options) { $attribute = $options['data']; $f->add('value',$attribute->getType()); } public function getDefaultOptions(array $options) { return array('data_class' => 'JWFWorkflowBundleEntityJobAttribute'); } public function getName() { return 'job_attribute'; } } 是的,确实,JobAttribute的type属性包含Form字段类型,例如.文本. 因此,当我在Controller中调用JobType上的FormBuilder时,$options [‘data’]正确填充了JobType中的Job-Object. 有什么问题?协会失去了哪里?为什么嵌套表单中的$options [‘data’] = NULL? 提前致谢! 解决方法
在构建表单时,您不能依赖$options [‘data’],因为数据可以(并且将会)在构建后随时更改.您应该使用事件侦听器.
$formFactory = $builder->getFormFactory(); $builder->addEventListener(FormEvents::PRE_SET_DATA,function (FormEvent $event) use ($formFactory) { $form = $event->getForm(); $data = $event->getData(); if ($data instanceof JobAttribute) { $form->add($formFactory->createNamed('value',$data->getType()); } }); 这篇can be found in the cookbook的文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |