Symfony2: отправка формы выполняется 2 раза - удвоенные результаты

1

Когда я отправляю форму, я удвоил результаты. Невозможно найти причину проблемы. Я подал форму только один раз, и мне нужна только одна запись, но почему-то она удваивается.

Аренда - мой контроллер:

\AppBundle\Controller\контроллера по умолчанию

 /**
 * @Route("/test/add", name="addTest", defaults={"_locale": "sr"}, requirements={
 *    "_locale": "en|sr"
 * })
 * @Method({"GET", "POST"})
 */
public function addTestAction(Request $request)
{
    $test = new Test();
    $testForm = $this->createForm(new TestType(), $test);

    if ($request->isMethod('POST'))
    {
        $testForm->submit($request->request->get($testForm->getName()));

        if($testForm->isValid())
        {
            $testFormData = $testForm->getData();
            exit(\Doctrine\Common\Util\Debug::dump($testFormData));
        }
    }

    return $this->render(
        'AppBundle:trt:addTest.html.twig', array(
            'form' => $testForm->createView(),
        )
    );
}

Аренда - мое лицо:

\AppBundle\Entity\Test

class Test
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=64)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="region", type="string", length=64)
     */
    private $region;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Test
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set region
     *
     * @param string $region
     * @return Test
     */
    public function setRegion($region)
    {
        $this->region = $region;

        return $this;
    }

    /**
     * Get region
     *
     * @return string 
     */
    public function getRegion()
    {
        return $this->region;
    }
}

Hire - это мой тип формы:\AppBundle\Form\Type

class TestType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text')
            ->add('region', 'text')
        ;
    }

    public function getName()
    {
        return 'test1';
    }

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

и представление: AppBundle\Resources\views\trt\addTest.html.twig

{% extends 'default/layout.html.twig' %}

{% block content %}

    <div><label>add Test view</label></div>

    {{ form_start(form) }}
    {{ form_row(form.name) }}
    {{ form_row(form.region) }}
    <div>
        <input type="submit" value="Dodaj test grad" />
    </div>
    {{ form_end(form) }}
{% endblock %}

после представления формы результат:

object(stdClass)[438]
  public '__CLASS__' => string 'AppBundle\Entity\Test' (length=21)
  public 'id' => null
  public 'name' => string 'Moscow' (length=6)
  public 'region' => string 'Moscow' (length=6)

object(stdClass)[438]
  public '__CLASS__' => string 'AppBundle\Entity\Test' (length=21)
  public 'id' => null
  public 'name' => string 'Moscow' (length=6)
  public 'region' => string 'Moscow' (length=6)
Теги:
forms
form-submit

3 ответа

0

Обновите свой контроллер до:

/**
 * @Route("/test/add", name="addTest", defaults={"_locale": "sr"}, requirements={
 *    "_locale": "en|sr"
 * })
 * @Method({"GET", "POST"})
 */
 public function addTestAction(Request $request) {

   $test = new Test();
   $testForm = $this->createForm(new TestType(), $test);

   $testForm->handleRequest($request);

   if ($testForm->isValid()) {

       $testFormData = $testForm->getData();
       exit(\Doctrine\Common\Util\Debug::dump($testFormData));
   }

   return $this->render(
       'AppBundle:trt:addTest.html.twig', array(
           'form' => $testForm->createView(),
       )
   );
}

причина, почему вы называете submit дважды, который:

$testForm-> отправить ($request-> request-> Get ($testForm-> GetName()));

которые вызывают при отправке формы, поэтому у вас есть дважды данные.

0

Похоже, что Debug :: dump - это собственные данные printig. Сначала вызовите это и выйдите после него без каких-либо аргументов

  • 0
    Спасибо за ответ, Debug :: dump был глючным. Спасибо за помощь.
0

удалите эту строку в своем контроллере. Действие:

$testForm->submit($request->request->get($testForm->getName()));

изменено:

$testForm->handleRequest($request);

if ($testForm->isValid()) {

   $testFormData = $testForm->getData();
   exit(\Doctrine\Common\Util\Debug::dump($testFormData));

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню