2015-11-09 83 views
1

當我提交表單時,我的結果加倍了。找不到問題的原因。我只提交了一次表格,我只需要一條記錄,但不知何故,它已經翻了一番。Symfony2:表單提交執行2次 - 加倍結果

租用是我的控制器:

\的appbundle \控制器\ DefaultController

/** 
* @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 \實體\測試

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 \資源\意見\ 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

看來,調試::轉儲是它自己的printig數據。稱之爲第一,並在其後退出,不帶任何參數

+0

感謝您的回答,調試::轉儲是越野車。感謝幫助。 – Dulo

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

的原因,是你叫提交兩次,其中:

$ testForm->提交($請求 - >請求 - > GET($ testForm->的getName()));

當您提交表單時調用,這就是爲什麼您有兩次數據。