我正在尝试开发一个投注网页。我有一个实体“Apuesta”(赌注)和一个实体“Partido”(匹配)。“Apuesta”有一个 Partido 集合(在 attr $Partidos 中)和返回集合的 getter getPartidos()。“Partido”有一个类型(0 或 1),根据这个值指定他的表单字段。
我想要得到的是将“Partido”表单包含到“Apuesta”表单中,但我希望“Partido”知道自己根据 $Type 值呈现他自己的表单。显然,“Apuesta”是用他自己的“Partidos”在数据库中创建的。
我的代码是:
class ApuestaForm extends AbstractType{
public function buildForm(FormBuilder $builder, array $options)
{
$p = $builder->getData()->getPartidos();
$builder->add('Jornada')
->add('Partidos', 'collection', array('type' => new PartidoForm()));
}
public function getName(){
return 'ApuestaForm';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'A\ApuestaBundle\Entity\Apuesta',
);
}
}
#
class PartidoForm extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
**$tipo;
//$partido = $builder->getData();
//$tipo = $partido->getTipo();
$builder->add('Local')
->add('Visitante')
->add('Tipo')
->add('Jornada');
if ($tipo == 1){
$builder->add('some field 1')
}
else{
$builder->add('some field 2')
}
}
public function getName(){
return 'PartidoForm';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'A\ApuestaBundle\Entity\Partido',
);
}
}
这样,“Apuesta”会自动渲染他自己的“Partidos”,每个“Partido”都应该知道他的 $Type 是 1 还是 0。问题是 $builder->getData() 没有得到“Partido”实体,但也是一个空值。
我认为这样做的另一种方法是使用实体参数“Partido”进行构造,但问题是“Apuesta”表单呈现“Partido”的集合,所以我不能传递单个对象“Partido” ,也是一个集合。
我尽量不使用 Form 事件,因为它是一个非常简单的 Form。
非常感谢!