由于围绕这个主题的文档有点薄,我走到了死胡同。
我有两个模型:Job 和 JobAttribute。一个 Job 有很多 JobAttributes,一个 JobAttribute 有一个 Job:
class Job {
/**
* @ORM\OneToMany(targetEntity="JobAttribute", mappedBy="job_attributes")
*
* @var ArrayCollection
*/
private $attributes;
}
class JobAttribute {
/**
* @ORM\Column(name="type", type="string", length=50)
*
* @var string
*/
private $type;
/**
* @ORM\ManyToOne(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' => 'JWF\WorkflowBundle\Entity\JobAttribute');
}
public function getName() {
return 'job_attribute';
}
}
是的,确实,JobAttribute 的 type 属性包含一个 Form 字段类型,例如。文本。
因此,当我在 Controller 中调用 JobType 上的 FormBuilder 时,$options['data'] 正确地填充了 JobType 中的 Job-Object。但是嵌套的 JobAttributeType 的 $options['data'] 并不指向 JobAttribute 对象。它是空的。
有什么问题?协会丢到哪里去了?为什么 $options['data'] = NULL 在嵌套形式中?是否有一种解决方法可以以嵌套形式获取动态字段类型(超出 Doctrine)?
提前致谢!