我有这个表格涉及电影类的对象,它有导演关系,我想在选择现有导演或创建新导演之间做出选择。 第一个选择很简单:
class FilmType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('director');
}
}
第二种选择也很简单:
class FilmType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('director', new DirectorType());
}
}
但我无法弄清楚如何调和这两种解决方案。 我试过这个:
class FilmType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('director')->add('director2', new DirectorType());
}
}
但当然,它不起作用,因为我的实体没有相应的字段,我收到以下错误:
既不是属性“director_2”也不是方法“getDirector2()”也不是方法 “isDirector2()”存在于“Uc \ LegalBundle \ Entity \ Film”类中
我想我应该创建一个名为DirectorChoiceType
的新类,但是这似乎有点太多了。是不是有更简单的方法?
我想要实现的目标:
答案 0 :(得分:1)
// form
class FilmType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('new_director_fn')
->add('new_director_ln')
->add('director', null, array(
'empty_value' => 'Choose an option',
'required' => false
));
}
}
// entity
class Film
{
// not mapped
private $new_director_fn;
// not mapped
private $new_director_ln;
// orm relation
private $director;
}
}
// controller
class FilmController
{
public function createAction()
{
//...
if ($form->isValid()) {
if ( $film->director === null && ($film->new_director_fn && $film->new_director_ln) )
{
$director = new Director();
$director->setFirstName($film->new_director_fn);
$director->setLastName($film->new_director_ln);
$em->persist($director);
$film->setDirector($director);
}
$em->persist($film);
$em->flush();
}
//...
}
}