2011-08-23 16 views
9

Come posso creare una lista di selezione con valori da una tabella di database in Symfony 2?Symfony 2 Modulo con lista di selezione

Ho 2 entità: Student e aula con un rapporto ManyToOne e ho bisogno di creare un modulo con i campi folowing: nome, cognome, età, aula (selezionare Elenco dalle classi disponibili).

Nel mio Student Modulo ho

$builder 
     ->add('name') 
     ->add('surname') 
     ->add('age') 
     ->add('classroom', new ClassroomType()) 
    ; 

Nel mio aula Modulo ho questo:

$classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll(); 
    $builder 
     ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName()))); 

ottengo questo errore seguente:

Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13   

Tipo Cordiali saluti, Cearnau Dan

+0

qui una spiegazione: http://groups.google.com/group/symfony2/browse_thread/thread/ da8f72b33f9f93ba – tttony

risposta

24

Non so se hai ancora trovato una risposta, ma ho solo dovuto fare un po 'di ricerche per capirlo per il mio progetto.

La classe del modulo non è impostata per utilizzare Doctrine come il controller in modo da non poter fare riferimento allo stesso modo. Quello che vuoi fare è usare lo entity Field Type che è una scelta speciale Tipo di campo che ti permette di caricare opzioni da un'entità Doctrine come stai provando a fare.

Ok, per così poco tempo. Invece di fare ciò che si sta facendo per creare il campo scelta, fare questo:

->add('category', 'entity', array(
    'class' => 'VendorWhateverBundle:Category', 
    'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); }, 
    'property' => 'name', 
)) 

non sono sicuro se si potesse inserire la funzione query_builder in un repository o cosa, sto tipo di oscillare selvaggiamente, come ho partire. Fino a questo punto la documentazione che ho collegato sopra è abbastanza chiara su cosa fare. Immagino che il prossimo passo sia leggere su Doctrine's QueryBuilder.

Mentre sei lì penso che si vuole far cadere il pezzo in cui si intende inserire la forma Aula,

->add('classroom', new ClassroomType()) 

Probabilmente non si vuole che la gente che creano le proprie aule. A meno che tu non lo faccia, allora si.

+0

Sì, tipo di campo entità è ciò di cui ho bisogno. – ziiweb

+0

Mi hai appena salvato un sacco di ore, +1 –

0

Se le entità sono mappati, questa è una soluzione pulita per Symfony 2.8 o successiva o 3+

<?php 

namespace My\AppBundle\Form\Type; 

use My\AppBundle\Entity\Student; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class StudentType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('surname') 
      ->add('age') 
      /* 
      * It will be resolved to EntityType, which acts depending on your doctrine configuration 
      */ 
      ->add('classroom'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(['data_class' => Student::class]); 
    } 
} 
Problemi correlati