2016-09-14 2 views
0

Ich habe zwei Entitäten Studenten und Klassen und ich möchte ein Formular erstellen, zeigt die Schüler Details und ein Dropdown/chocelist von Klassen und eine Klasse der Schüler zuweisen. Auch sollten die Klassen aus der DB-Tabelle kommen, so dass der Controller so ist.symfony 3 UndefinedOptionsException - Dropdown aus der Datenbank

public function studentAddClassAction($id, Request $request) 
{ 
    // get the student from the student table 
    $em  = $this->getDoctrine()->getManager(); 
    $student= $em->getRepository('PIE10Bundle:Student')->find($id); 

    // new class object and create the form 
    $class = new Classes; 
    $form = $this->createForm(ClassesType::class, $class); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()) 
    { 
     // form operation - update student row with the classID 
    } 

    return $this->render(
         'PIE10Bundle:student:layout_student_addclass.html.twig', 
         array(
          'student'=> $student, 
          'title' => 'Add Class', 
          'tables' => 1, 
          'form' => $form->createView() 
         ) 
    ); 
} 

und mein ClassesType ist wie unter

class ClassesType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('classes', 
         ClassesType::class, 
         array(
          'class'  => 'PIE10Bundle:Classes', 
          'property' => 'className', 
          'expanded' => false, 
          'multiple' => false 
        )); 
     $builder->add('Add Class', 
         SubmitType::class, 
         array('attr' => array('class' => 'btn btn-primary', 
               'style' => 'margin:15px 0;'))); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'PIE10Bundle\Entity\Classes', 

     )); 
    } 
} 

und wenn ich versuche, dieses Formular zuzugreifen ich den folgenden 500 Internal Server Error bekommen - UndefinedOptionsException Fehler

Die Optionen "class", "expanded", "multiple", "property" existieren nicht. Definierte Optionen sind: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "Verbindung", "Constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id "," csrf_token_manager "", "daten", "data_klasse", "beschreibung", "deaktiviert", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "Methode", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "validation_groups".

Also muss ich wissen, was schief gelaufen ist und wie man das beheben kann. Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden. Dank

Antwort

1

In ClassesType Änderung:

$builder->add('classes', ClassesType::class, ... 

zu:

$builder->add('classes', EntityType::class, ... 

auch hinzufügen:

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 

am Anfang der Datei, für die sie zur Verfügung stehen.


Derzeit verwenden Sie ClassesType selbst (die problably in einer Endlosschleife führen würde, wenn es nicht für die Fehler aufgetreten sind). Dieser Typ erweitert die EntityType nicht und daher sind die von Ihnen verwendeten Optionen (class, expanded, multiple, property) nicht vorhanden.

Auch nicht, dass property veraltet ist, sollten Sie choice_label/choice_value verwenden, es sei denn, Sie verwenden eine ziemlich alte Version von Symfony.


Referenz: EntityType Field

+0

Danke dafür und ich habe tri Ed es und es gibt 'Konnte nicht laden Typ" PIE10Bundle \ Form \ EntityType "' – mapmalith

+0

Sie müssen * den richtigen Namespace * verwenden, werde ich meine Antwort aktualisieren. – Yoshi

+0

Ich habe den Namespace hinzugefügt, aber ohne Glück jetzt geting 'Die Option" Eigenschaft "existiert nicht. Definierte Optionen sind: "action", "allow_extra_fields", "attr", ".... etc – mapmalith

0

Mit der Verwendung von @Yoshi Antwort änderte ich die

$builder->add('classes', ClassesType::class, ...

zu

$builder->add('classes', EntityType::class, ...

und fügte auch die

use Symfony\Bridge\Doctrine\Form\Type\EntityType; zum ClassesType Datei und dann die -Controller aktualisiert wie unten

public function studentAddClassAction($id, Request $request) 
{ 
    // get the student from the student table 
    $em  = $this->getDoctrine()->getManager(); 
    $student= $em->getRepository('PIE10Bundle:Student')->find($id); 

    // new class object and create the form 
    $class = $em->getRepository('PIE10Bundle:Classes')->findAll(); 
    $form = $this->createForm(ClassesType::class, $class); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()) 
    { 
     // form operation - update student row with the classID 
    } 

    return $this->render(
         'PIE10Bundle:student:layout_student_addclass.html.twig', 
         array(
          'student'=> $student, 
          'title' => 'Add Class', 
          'tables' => 1, 
          'form' => $form->createView() 
         ) 
    ); 
} 

und dann die ClassesType wie folgt

class ClassesType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('classes', 
         EntityType::class, 
         array(
          'class'  => 'PIE10Bundle:Classes', 
          'expanded' => false, 
          'multiple' => false 
        )); 
     $builder->add('Add Class', 
         SubmitType::class, 
         array('attr' => array('class' => 'btn btn-primary', 
               'style' => 'margin:15px 0;'))); 
    } 
} 

@Yoshi Antwort hat mir geholfen, das zu beheben Fehler

Verwandte Themen