Reputation: 11
I'm going to recover seminaire entity in InscritSeminaireType:
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';
}
}
but it return an error:
Notice: Undefined variable: id in C:\wamp\www\PFE\EOL\src\Esprit\SeminaireBundle\Form\InscritSeminType.php line 22
So could anybody tell me how can I fix this?
Upvotes: 1
Views: 1065
Reputation: 8420
If I understand correctly that you want to recover a precise "Seminaire" from its id in the form builder, you have to pass the id to the class first.
Here is an example on how to do it. You have to do changes at two places.
First in the controller class :
// NOTICE THE $id, you have to pass it to the constructor.
$form = $this->createForm(new InscritSeminType($id), $entity);
Then in the Form Type :
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';
}
}
You pass the id in the constructor and then retrieve it in the buildForm function.
Upvotes: 1