我将在InscritSeminaireType中恢复seminaire实体:
class InscritSeminType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
//->add('dateInscrit')
->add('seminaire','entity', array(
'class' => 'EspritSeminaireBundle:Seminaire',
'query_builder' => function($repository)use ($id) {
return $repository->getSeminaireLibre('id')
->setParameter('id', $id)
;
},
'required' => false,
))
//->add('etudiant')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Esprit\SeminaireBundle\Entity\InscritSemin',
));
}
public function getName() {
return 'esprit_seminairebundle_inscritsemintype';
}
}
但它返回错误:
注意:未定义的变量:C:\ wamp \ www \ PFE \ EOL \ src \ Esprit \ SeminaireBundle \ Form \ InscritSeminType.php第22行中的id
所以有人能告诉我如何解决这个问题?
答案 0 :(得分:1)
如果我理解你想要从表单构建器中的id恢复精确的“Seminaire”,你必须先将id传递给该类。
以下是如何操作的示例。您必须在两个地方进行更改。
首先在控制器类中:
// NOTICE THE $id, you have to pass it to the constructor.
$form = $this->createForm(new InscritSeminType($id), $entity);
然后在表单类型中:
class InscritSeminType extends AbstractType {
private $id;
public function __construct($id){
$this->id = $id // Keep the id of the item.
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$id = $this->id; // Retrieve the id
$builder
->add('seminaire','entity', array(
'class' => 'EspritSeminaireBundle:Seminaire',
'property' => 'id', // To tell the mapping is on the id.
'query_builder' => function($repository) use ($id) {
return $repository->getSeminaireLibre($id)
},
'required' => false,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Esprit\SeminaireBundle\Entity\InscritSemin',
));
}
public function getName() {
return 'esprit_seminairebundle_inscritsemintype';
}
}
您在构造函数中传递id,然后在buildForm函数中检索它。