1

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';
    }
}

しかし、それはエラーを返します:

注意: 未定義の変数: C:\wamp\www\PFE\EOL\src\Esprit\SeminaireBundle\Form\InscritSeminType.php 行 22 の id

どうすればこれを修正できますか?

4

1 に答える 1

1

フォーム ビルダーの ID から正確な「Seminaire」を復元したいということを正しく理解している場合は、最初に ID をクラスに渡す必要があります。

これを行う方法の例を次に示します。2 か所で変更を行う必要があります。

コントローラークラスの最初:

// 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 関数で取得します。

于 2013-04-13T15:36:46.353 に答える