2017-11-09 3 views
0

これを読んでSymfony CSRF and Ajaxを返すだけで、csrfが返されますが、jQueryをどのように返すべきでしょうか?csrfを返すjqueryの方法

EDIT:私のコードは以下の通りです:

$formFactory = Forms::createFormFactoryBuilder() 
    ->addExtension(new CsrfExtension($csrfManager)) 
    ->getFormFactory(); 


$defaultFormTheme = 'bootstrap_3_layout.html.twig'; 

$vendorDir = realpath(__DIR__.'/../vendor'); 
$appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable'); 
$vendorTwigBridgeDir = dirname($appVariableReflection->getFileName()); 
$viewsDir = realpath('twig'); 

$twig = new Twig_Environment(new Twig_Loader_Filesystem(array(
    $viewsDir, 
    $vendorTwigBridgeDir.'/Resources/views/Form', 
))); 
$formEngine = new TwigRendererEngine(array($defaultFormTheme), $twig); 
$twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array(
    TwigRenderer::class => function() use ($formEngine, $csrfManager) { 
     return new TwigRenderer($formEngine, $csrfManager); 
    }, 
))); 
$twig->addExtension(new FormExtension()); 

$translator = new Translator('en'); 
$twig->addExtension(new TranslationExtension($translator)); 
$form = $formFactory->createBuilder() 
    ->add('task', TextType::class) 
    ->add('dueDate', DateType::class) 
    ->getForm(); 

$request = Request::createFromGlobals(); 
$form->handleRequest($request); 
if ($form->isSubmitted() && $form->isValid()) { 
    $data = $form->getData(); 
    print_r($data); 
} 

$twig->display('new.html.twig', array(
    'form' => $form->createView(), 
)); 

は、その後、私は持っている私のフォームテンプレートで:私は私のソースコードを見てみると

<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script> 
<script> 
$.ajax({ 
    url: "app.php", 
    type: 'POST', 
    data: { 
     form: { 
      _token: "{{ csrf_token('form') }}" 
     } 
    }, 
}); 
</script> 
</head> 
<body> 

{{ form_start(form, {'method': 'POST', 'action': 'app.php'}) }} 
{{ form_row(form.task, {'required': false}) }} 
    <input type="submit" /> 
{{ form_end(form, {'render_rest': false}) }} 

私は以下を参照してください

<script> 
$.ajax({ 
    url: "app.php", 
    type: 'POST', 
    data: { 
     form: { 
      _token: "Kf1IK4uikxPCxfmjUkDa8vhRiNI4PWS2zdnTIiWyHC4" 
     } 
    }, 
}); 
</script> 
<form name="form" method="post" action="app.php"> 
<div class="form-group"><label class="control-label" for="form_task">Task</label><input type="text" id="form_task" name="form[task]" class="form-control" value="qqq" /></div> 


    <input type="submit" /> 
</form> 

だからトークンが生成されますが、私が印刷デバッグを行うと、_tokenがポストされているとは見えません。私は何をしましたか?

+0

を参照してください。私の投稿の編集部分。 –

答えて

0

あなたのリンクの答えの一つで記述し、またはのみのみトークン

トークン送るようフォームをシリアライズすることができます

$.ajax({ 
    url: "{{ path('your_edit_route') }}", 
    type: 'POST', 
    data: { 
     form: { 
      _token: "{{ csrf_token('form') }}" 
     } 
    }, 
}); 

フォーム全体:

var data = $('#targetForm').serialize(); 

$.ajax({ 
    url: "{{ path('your_edit_route') }}", 
    type: 'POST', 
    data: data, 
}); 
+0

トークンのみのアプローチでは、フォーム内のこのajaxによって_tokenフィールドが返されるようにフォームをどのように表示する必要がありますか? –

+0

私は理解していない、フォームは単なるフォームで、それはトークンフィールドが隠されている限りあなたが望むもののように見える – goto

+0

私のポストの "編集"部分を参照してください。 –

関連する問題