2016-09-01 5 views
1

Ich habe eine symfony 3 Form. Und ich versuche es mit handelte so zu füllen:Symfony Form handleRequest nicht bevölkern

$user = new User(); 
$userForm = $this->createForm(UserType::class, $user); 
print_r($request->request->all()); 
$userForm->handleRequest($request); 

print_r($userForm->getData()); 

Der Ausgang ich erhalte, ist:

Array 
(
    [firstName] => test 
    [last_name] => test 
    [email] => [email protected] 
    [password] => erkeferke 
    [gender] => F 
    [supervisor] => 1 
) 
AppBundle\Entity\User Object 
(
    [id:AppBundle\Entity\User:private] => 
    [firstName] => 
    [lastName:AppBundle\Entity\User:private] => 
    [email:AppBundle\Entity\User:private] => 
    [password:AppBundle\Entity\User:private] => 
    [photo:AppBundle\Entity\User:private] => 
    [gender:AppBundle\Entity\User:private] => 
    [supervisor:AppBundle\Entity\User:private] => 
    [duties:AppBundle\Entity\User:private] => 
    [lastLogin:AppBundle\Entity\User:private] => 
    [createdAt:AppBundle\Entity\User:private] => 
    [updatedAt:AppBundle\Entity\User:private] => 
    [deletedAt:AppBundle\Entity\User:private] => 
) 

Jede Idee, warum es bevölkert nicht?

+0

Wann machst du '$ userForm-> getData()' es nach Wunsch behandelt getan werden sollte, wurde und nach der Überprüfung '$ userForm-> isValid()'. – Samundra

+0

Ok, es meldet, dass es nicht gültig ist. Aber ich habe keine Ahnung, wie ich die Fehler bekommen soll. – overburn

+0

Siehe meinen Beispielcode unten und versuche, deine Codestruktur wie die, die ich gezeigt habe, zu vergleichen. Sobald Sie die Idee haben, können Sie zwicken, wie Sie es mögen. Lassen Sie uns wissen, wenn Sie irgendwelche Verwirrungen haben. – Samundra

Antwort

1

Um Entitäten automatisch aus Formularanforderungen zu füllen, müssen Sie Ihre Entität an die FormType-Klasse binden. Sie könnten diese Bindung aus Ihrer Klasse UserType vermissen. Im Formular UserType sollten Sie eine Methode configureOptions hinzufügen, in der Sie den Schlüssel entity class name in data_class eingeben. Um mehr Einblicke in es zu haben, siehe Symfony Forms und scrollen Sie nach unten zu Setting the data_class Thema. Siehe auch unten, wo ich die Verwendung aufgelistet habe. Jetzt

<?php namespace AppBundle\Form; 

... 

class SiteType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // define form fields 
    } 


    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Site', // Entity to resolve to 
     )); 
    } 
} 

, wenn Sie das Formular verwenden, wird Ihr Unternehmen von der Anforderung aufgelöst, wie unten $site = $form->getData() gezeigt Site Einheit zurück. Dies ist ziemlich schwierig, um gleich beim ersten Mal richtig zu kommen. Sie müssen es viel üben, bis Sie davon hängen. Lassen Sie uns wissen, wenn Sie Verwirrungen folgen.

/** 
* 
* @param Request $request 
* 
* @return \Symfony\Component\HttpFoundation\Response 
* 
* @Route("/sites/create", name="_create_site") 
*/ 
public function createSite(Request $request) 
{ 
    $site = new Site; 
    $form = $this->createForm(SiteType::class, $site); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) {   
     $site = $form->getData(); // It will return Site Entity 

     ... 

     $this->addFlash('success', 'Record added successfully.'); 
    } 

    return $this->render('sites/create.html.twig', [ 
     'site_form' => $form->createView(), 
    ]); 
} 
+0

danke. Es klappt. Übrigens, jede Idee, warum Formular erhalten Daten gibt mehrere Einträge vom Typ Benutzer zurück? Ich bin sprachlos – overburn

+0

Wenn es für Sie funktioniert, dann markieren Sie bitte meine Antwort als angenommene Antwort. Ich habe nicht verstanden, was du mit mehreren Einträgen vom Typ User meinst? – Samundra