2013-04-12 41 views
1

我有一個表單不斷收到「CSRF令牌無效,請嘗試重新提交表單。」我一直無法找到原因。Symfony2 CSRF令牌無效。請嘗試重新提交表單

我知道這很簡單。任何幫助,將不勝感激。

在控制器我有這樣的:

public function settingsAction() 
{ 
    $request = $this->getRequest(); 

    /* @var $user User */ 
     $user = $this->get('security.context')->getToken(); 

    $settingsForm = $this->createForm(new SettingsFormType(), array($user)); 
    $billingForm = $this->createForm(new BillingFormType(), array($user)); 
    $accountForm = $this->createForm(new AccountFormType(), array($user)); 



     return $this->render('DeductrDeductrBundle:Settings:settings.html.twig', array(
       'settingsForm' => $settingsForm->createview(),'billingForm' => $billingForm->createview(),'accountForm' =>$accountForm->createview(),)); 
} 

public function createAction() 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 

    $form = $this->createForm(new RegistrationFormType('Deductr\UserBundle\Entity\User')); 

    $form->bind($this->getRequest()); 

    if ($form->isValid()) { 
     $user = $form->getData(); 

     $em->persist($user); 
     $em->flush(); 

     return $this->redirect('/settings'); 
    } 

的.twig文件中有這樣的:

{% extends 'DeductrDeductrBundle:Base:base.html.twig' %} 


{% block body %} 
<div name='personal' style="padding-left:25px; width:600px;"> 
<h5>Personal Information</h5> 
{#src/Deductr/DeductrBundle/Resources/views/settings/settings.html.twig #} 
<form action="{{ path('user_registration_create') }}" {{ form_enctype(settingsForm) }}" method="POST" {{ form_enctype(settingsForm) }}> 

<table> 
     <tr> 
      <td>First Name</td> 

      <td>Last Name</td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td> 
     {{ form_widget(settingsForm.first_name, {'attr': {'class' : 'half'}}) }} 
      </td> 

      <td> 
       {{ form_widget(settingsForm.last_name, {'attr': {'class' : 'half'}}) }} 
      </td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td colspan="3">Company</td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       {{ form_widget(settingsForm.company, {'attr': {'class' : 'half'}}) }} 

      </td> 
     </tr> 
     <tr> 
      <td colspan="3">Address 1</td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       {{ form_widget(settingsForm.address1, {'attr': {'class' : 'half'}}) }} 

      </td> 
     </tr> 
     <tr> 
      <td colspan="3">Address 2</td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       {{ form_widget(settingsForm.address2, {'attr': {'class' : 'half'}}) }} 

      </td> 
      </tr> 
      <tr> 
      <td colspan='2'> 
       <label for 'city'>City</label> 
      </td> 
      <td>&nbsp;</td> 

      </tr> 

     <tr> 
      <td colspan='2'> 
       {{ form_widget(settingsForm.city, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td><label for 'state'>State</label> 
      <td> 
       <label for 'zip'>Zip/Postal</label> 
      </td> 
      <td> 
       <label for 'phone'>Phone Number</label> 
      </td> 

     </tr> 
      <tr> 
      <td> 
       {{ form_widget(settingsForm.province, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td> 
       {{ form_widget(settingsForm.postal_code, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td> 
       {{ form_widget(settingsForm.phone, {'attr': {'class': 'half'}}) }} 
      </td> 

     </tr> 
     <tr> 
    <td>&nbsp;</td>   
    <td>&nbsp;</td> 
    <td><input type="submit" value="{{ 'submit'|trans({}, 'DeductrUserBundle') }}" /></td> 
</tr> 
</table> 
{{ form_row (settingsForm._token) }} 
</form> 

</div> 
<div id="billing" style="padding-left:25px; width:600px;"> 
<h5>Billing Information</h5> 
<form action="" method="POST" {{ form_enctype(billingForm) }}> 
    {{ form_row (billingForm._token) }} 

<table> 
    <!-- <tr> 
      <td>First Name</td> 

      <td>Last Name</td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td> 
     {{ form_widget(billingForm.fname, {'attr': {'class' : 'half'}}) }} 
      </td> 

      <td> 
       {{ form_widget(billingForm.lname, {'attr': {'class' : 'half'}}) }} 
      </td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td colspan="3">Address 1</td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       {{ form_widget(billingForm.billingAddress1, {'attr': {'class' : 'half'}}) }} 

      </td> 
     </tr> 
     <tr> 
      <td colspan="3">Address 2</td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       {{ form_widget(billingForm.billingAddress2, {'attr': {'class' : 'half'}}) }} 

      </td> 
      </tr> 
      <tr> 
      <td colspan='2'> 
       <label for 'city'>City</label> 
      </td> 
      <td>&nbsp;</td> 

      </tr> 

     <tr> 
      <td colspan='2'> 
       {{ form_widget(billingForm.billingCity, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td><label for 'state'>State</label> 
      <td> 
       <label for 'zip'>Zip/Postal</label> 
      </td> 
      <td> 
       <label for 'phone'>Phone Number</label> 
      </td> 

     </tr> 
      <tr> 
      <td> 
       {{ form_widget(billingForm.billingState, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td> 
       {{ form_widget(billingForm.billingZip, {'attr': {'class': 'half'}}) }} 
      </td> 
      <td> 
       {{ form_widget(billingForm.billingPhone, {'attr': {'class': 'half'}}) }} 
      </td> 

     </tr> --> 
<tr> 
    <td colspan='3'> 
    <h5>Payment Information</h5> 
    </td> 
</tr> 
    <tr> 
     <td>Expiration Date</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
     <tr> 
     <td>{{ form_widget(billingForm.expMonth, {'attr': {'class': 'half'}}) }}</td> 
     <td>{{ form_widget(billingForm.expYear, {'attr': {'class': 'half'}}) }}</td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
    </tr> 
    <tr> 
     <td>Credit Card Type</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
     <tr> 
     <td>{{ form_widget(billingForm.ccType, {'attr': {'class': 'half'}}) }}</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
    </tr> 
    <tr> 
     <td>Credit Card Number</td> 
     <td>&nbsp;</td> 
     <td>CVV</td> 
    </tr> 
     <tr> 
     <td>{{ form_widget(billingForm.cardNumber, {'attr': {'class': 'half'}}) }}</td> 
     <td>&nbsp;</td> 
     <td>{{ form_widget(billingForm.cvv, {'attr': {'class': 'half'}}) }}</td> 
    </tr> 
    <tr> 
    </tr> 
<tr> 
    <td>&nbsp;</td>   
    <td>&nbsp;</td> 
    <td><input type="submit" value="{{ 'submit'|trans({}, 'DeductrUserBundle') }}" /></td> 

</tr> 
</table> 
</div> 
</form> 

</div> 
<div id="account" style="padding-left:25px; width:600px;"> 
<h5>Account Information</h5> 
<form action="" method="POST" {{ form_enctype(accountForm) }}> 
    {{ form_row (accountForm._token) }} 
<table> 
    <tr> 
     <td colspan='2'>Email</td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td colspan='3'>{{ form_widget(accountForm.email, {'attr': {'class': 'half'}}) }}</td> 
    </tr> 
    <tr> 
     <td colspan='2'>Password</td> 
     <td>Confirm Your Password</td> 
    </tr> 
    <tr> 
     <td>{{ form_widget(accountForm.password, {'attr': {'class': 'half'}}) }}</td> 
     <td>&nbsp;</td> 
     <td>{{ form_widget(accountForm.confPass, {'attr': {'class': 'half'}}) }}</td> 
    </tr> 
    <tr> 
    <td colspan='2'>&nbsp;</td> 
    <td><input type="submit" value="{{ 'submit'|trans({}, 'DeductrUserBundle') }}" /></td> 

</tr> 
</table> 
</form> 
</div> 
{% endblock %} 

回答

0

我認爲你是混合兩種不同形式的類型。

您正在渲染SettingsFormType類型的表單並將其提交到createAction,該表格創建的類型爲RegistrationFormType

生成CSRF令牌時很可能會考慮表單名稱。話雖這麼說,你的令牌綁定不同的和不正確的每一次的是 - 無論是什麼;)

希望這揭示了您的問題,一些輕;)

+0

那裏沒有運氣。我對symfony感到沮喪,並準備放棄嘗試。 –

+0

你能用完整的TWIG表單更新你的問題嗎?這個問題似乎很奇怪: -/ –

+0

添加了樹枝文件 –

5

如果這是你的整個表單模板,它可能是這個:

<form action="{{ path('user_registration_create') }}" {{ form_enctype(settingsForm) }}" method="POST" {{ form_enctype(settingsForm) }}> 
    {{ form_row (settingsForm._token) }} 

確保包括form_rest(settingsForm)

而且,爲什麼在一個頁面上有三種形式?如果您是Symfony的新手,請嘗試先讓一個表單在頁面上工作。你會 - 在你的情況下,需要三個form_rest - 我認爲每個表格每個實例一個。

很難說沒有更多的代碼tbh。

+0

我添加了樹枝文件 –

+0

或者在可能的情況下在樹枝中使用form_start(form)和form_end(form)。 – Jekis

0

我找到了答案。我沒有加入:

/** 
* Creates a new settungsUser entity. 
* 
* @Route("/settings/create", name="user_settings") 
* @Method("POST") 
* @Template("DeductrDeductrBundle:Settings:settings.html.twig") 
* 
*/ 

一旦我更新了它工作的樹枝的路徑。

感謝您的所有幫助。

相關問題