2016-09-01 6 views
1

У меня есть форма symfony 3. И я пытаюсь заполнить его handleRequest так:Symfony форма handleRequest не заполняется

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

print_r($userForm->getData()); 

Выход я получаю:

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] => 
) 

Любая идея, почему это не заселение?

+0

Когда вы делаете '$ userForm-> GetData()' это должно быть сделано после того, как запрос был обработан и после проверки '$ userForm-> IsValid()'. – Samundra

+0

Хорошо, он сообщает, что это неверно. Но я не знаю, как получить ошибки. – overburn

+0

см. Мой пример кода ниже и попытайтесь сопоставить структуру кода, как показано мной. Как только вы получите эту идею, вы можете настроить, как вам это нравится. Сообщите нам, есть ли у вас какие-либо недоумения. – Samundra

ответ

1

Чтобы автоматически заполнить объект из запроса формы, вам необходимо привязать объект к классу FormType. Возможно, вам не хватает этого связывания из класса UserType. В форме UserType вы должны добавить метод configureOptions внутри него вы указываете entity class name в data_class ключ. Чтобы узнать больше об этом, см. Symfony Forms и прокрутите страницу до Setting the data_class. Также см. Пример ниже, где я перечислял использование.

<?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 
     )); 
    } 
} 

Теперь, когда вы используете форму, ваше лицо будет решен из запроса, как показано ниже $site = $form->getData() возвратит Site сущности. Это довольно сложно сделать в первый раз. Вы должны много практиковать, пока не повеситесь. Сообщите нам, если у вас возникнут путаницы.

/** 
* 
* @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

спасибо. оно работает. Btw, любая идея, почему форма получает данные, возвращает несколько записей типа User? Я ошеломлен – overburn

+0

Если это работает для вас, пожалуйста, отметьте мой ответ в качестве принятого ответа. Я не понял, что вы подразумеваете под несколькими вводами типа User? – Samundra

 Смежные вопросы

  • Нет связанных вопросов^_^