2015-11-09 1 views
1

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

Hire мой контроллер:

\ 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(), 
     ) 
    ); 
} 

Hire моя сущность:

\ 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; 
    } 
} 

нанимаете мой тип формы: \ 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 \ вид \ 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) 

ответ

0

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

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

изменено:

$testForm->handleRequest($request); 

if ($testForm->isValid()) { 

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

} 
0

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

+0

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

0

Update ваш контроллер:

/** 
* @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(), 
     ) 
    ); 
} 

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

$ testForm-> отправить ($ request-> request-> прибудет ($ testForm-> GetName()));

Этот звонок, когда вы отправляете форму, вот почему у вас есть дважды данные.