2012-05-04 15 views
21

さて、今日私は、私たちのデータベースを私たちの「ライブ」データベースからの新しい情報で更新しました。それ以来、私のフォームの1つに問題がありました。コードが必要な場合は私に教えてください。これを編集して必要なコードを投稿します...symfony2 CSRFが無効

私は、エージェント部門の日付範囲フィールドとドロップダウンを持つレポートフォームを持っています。私が最初に私は、フォームの最初にこれを見るページを訪問すると:

The CSRF token is invalid. Please try to resubmit the form

をだから私は、同じ種類の情報を持っている私の他の形態のいずれかに越える、および_tokenをチェックアウトし、この出てくるものです:

<input type="hidden" id="ecs_crmbundle_TimeClockReportType__token" name="ecs_crmbundle_TimeClockReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" /> 
<input type="hidden" id="ecs_crmbundle_SimpleSalesReportType__token" name="ecs_crmbundle_SimpleSalesReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" /> 

最初の1がエラーを示したものであり、SimpleSalesReportは...すべてのアイデアは、なぜこれがこれをやっているしないか、私はそれを修正することができますか?

おかげで..

答えて

25

あなたはます$ form-を使用して偶然です> bindRequest()CSRFエラーが発生し、アクションでは?私はこの問題を抱えていた。あなたは新しいフォームの要求を拘束すべきではありません。

if ($this->getRequest()->getMethod() == 'POST') { 
    $form->bindRequest($this->getRequest()); 
    if ($form->isValid()) { 
    ... 
    } 
} 
+3

男はフリーキンの天才です!それはまさに私がやっていたことだ...しかし、あなたは来て、その日を救った! – Justin

+22

また、フォームの最後のフィールドとして、フォームの下部にform_rest(form)を追加することを忘れないでください。 SymfonyはCSRFトークンをそのステートメントに挿入することに気を取っています。 http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template – krishna

+0

@krishnaそれはまさに私が欠けていたものです。ちょっとコピーして貼り付けてください! – OrganicPanda

18

このエラーは日のために私はクレイジーだった:あなたは同じアクションにフォームを掲載している場合、メソッドはPOSTであるかどうかをチェックされ、条件付きでbindRequestを包みます! ありがとう、クリシュナ! フォームテンプレートでデフォルトのフォーム動作を使用しない場合は、{{ form_widget(form) }}を入力する必要があります。{{ form_rest(form) }} これが他の人に役立つことを願っています!

+0

form_restはsavierです –

+1

form_restは私が間違っていたところです。ありがとうございました! –

22

{{ form_widget(form) }}を使用してカスタムフォームを作成しても問題はありません。 このように_tokenを追加するだけです: {{ form_widget(form._token) }}

関連する問題