2017-01-23 2 views
0

フォームがサーバーに送信、検証、保存されたフォームのデータをSymfony2/3でどのように変更するのですか?提出フォームと検証フォームの後にCSRFトークンを変更してください

// AppController.php 
... 
public function saveAction(Request $request) { 
    $event = new Data(); 
    $form = $this->createForm(DataForm::class, $event); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $creator = $this->getDoctrine() 
      ->getRepository('AppBundle:User') 
      ->find($this->getUser()->getId()); 
     $event->setCreator($creator); 
     $entityManager = $this->getDoctrine()->getManager(); 
     $entityManager->persist($event); 
     $entityManager->flush(); 

<ここで何かCSRFトークンを変更します。何か案は? >

 return $this->redirect($this->generateUrl('event_view', ['id' => $event->getId()])); 
    } 
    $message = ['text' => 'Wrong data to save', 'type' => 'danger']; 
    $this->get('session')->set('messages', [$message]); 
    return $this->redirect($this->generateUrl('event_create')); 
} 
... 

答えて

1

それは自動的にCSRFトークンを再生成する必要があります。あなたのフォームタイプで :あなたのsaveActionで

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     //...other defaults 
     'intention'  => 'data_form_intention', 
    )); 
} 

あなたはAjaxでフォームを送信し、次のトークンを取得するために必要などんな理由であれば、私はあなたがこれを実行したいことを考えることができる唯一の理由は、次のようになります。

$csrf = $this->get('security.csrf.token_manager');  
$token = $csrf->refreshToken("data_form_intention"); 
+0

OptionsResolverInterfaceは推奨されていません。代わりに_'csrf_token_id'_でクラスOptionsResolverを使用しました。ありがとう。その仕事 – chrisperk

関連する問題