2017-12-23 6 views
-2

Ich bin Anfänger. Gestern habe ich Symfonys Tools wie generate: doctrine: crud getestet. Ich sehe jetzt, dass ich viele Dinge viel einfacher manuell machen kann. Der Fall ist nach der Analyse Code generiert ich gefunden:Warum benötige ich TaskType in createForm?

$editForm = $this->createForm('AppBundle\Form\TaskType', $task); 

Ich verbringe einige Zeit offizielle doc und einige Tutorials zu lesen, aber ich kann nicht genaue Antwort für meine Zweifel finden. Warum brauche ich diesen Teil: AppBundle\Form\TaskType? Was sollte es enthalten? Ich sehe, dass ich in TaskType-Datei verschieben kann, um das Formular zu erstellen.

$builder->add('name')->add('datetime'); 

Aber es ist nicht viel Nützlichkeit, wenn ich getrennte Datei nur dafür erstellen muss. Gibt es eine Möglichkeit, die Verwendung der TaskType-Datei zu vermeiden? Ich habe versucht, Bearbeitungsformular für Task Entity auf diese Weise auszuführen:

$editForm = $this->createForm($task); 

Aber es geht falsch. Grüße, Lukasz

EDIT # 1 ----- Controller editAction für Task-Entity

/** 
* Displays a form to edit an existing task entity. 
* 
* @Route("/{id}/edit", name="task_edit") 
* @Method({"GET", "POST"}) 
*/ 
public function editAction(Request $request, Task $task) 
{ 
    $deleteForm = $this->createDeleteForm($task); 
    $editForm = $this->createForm('AppBundle\Form\TaskType', $task); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $this->getDoctrine()->getManager()->flush(); 

     return $this->redirectToRoute('task_edit', array('id' => $task->getId())); 
    } 

    return $this->render('task/edit.html.twig', array(
     'task' => $task, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

und Tasktype

class TaskType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name')->add('datetime'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Task' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'appbundle_task'; 
    } 


} 
+0

Beitrag der Inhalt erstellen Form und die vollständige Steuerung, habe ich nicht die gleiche Version als früher, wenn crud zu erzeugen und in meinem Fall hatte ich ein Formularmethode pro Aktion erstellen – albert

+0

Code hinzugefügt, Version 3.3.10 – Lukaszy

+3

Willkommen bei Symfony. Am besten können Sie einige der [Formularbeispiele] (https://symfony.com/doc/current/forms.html) in den Dokumenten bearbeiten. Stellen Sie sicher, dass die Versionsnummer des Dokuments (oben rechts) mit Ihrer Symfony-Version übereinstimmt. Sobald Sie ein grundlegendes Verständnis von Formen haben, wird das Crud-Zeug mehr Sinn machen. – Cerad

Antwort

1

Dies ist die Methode der Steuerung Sie anrufen.

Der Framework Controller ist eine Fassade für mehrere Symfony Services. Einer von ihnen ist der FormFactory-Dienst.

Um ein Formular zu erstellen, benötigen Sie:

  1. Der Formulartyp (Erforderlich)
  2. Daten (Optional)
  3. Formularoptionen (Optional)

Create() es umgesetzt wird In der Elternklasse ist es also allgemein für alle Arten von Formularen und Implementierungen.

Symfony \ Bundle \ FrameworkBundle \ Controllers \-Controller

/** 
    * Creates and returns a Form instance from the type of the form. 
    * 
    * @param string|FormTypeInterface $type The built type of the form 
    * @param mixed     $data The initial data for the form 
    * @param array     $options Options for the form 
    * 
    * @return Form 
    */ 
    public function createForm($type, $data = null, array $options = array()) 
    { 
     return $this->container->get('form.factory')->create($type, $data, $options); 
    } 
+0

Danke. Wo hast du diese Definition gefunden? Ich fand nur https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php#L304 aber Kommentare sind weniger brauchbar. – Lukaszy

+0

Ich bin immer noch auf Symfony 2.7 auf dem Projekt Ich habe jetzt geöffnet – albert

+0

Überprüfen Sie die Formular-Factory-Schnittstelle: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/FormFactoryInterface.php# L32 – albert

Verwandte Themen