Symfony2 양식을 작성하여 요청에 바인딩했습니다. 나머지 양식을 진행하기 전에 CSRF 토큰이 유효한지 유효하지 않은지를 명시 적으로 확인해야합니다.Symfony2에서 제공된 CSRF 토큰이 유효하지 않은지 어떻게 확인할 수 있습니까?
$form['_token']->isValid()
OutOfBoundsException
"자식 _ 토큰 존재하지 않음"메시지가 표시됩니다.
렌더링 된 양식에 _token
필드가 있는지 확인할 수 있습니다. CSRF 값이 유효하지 않은 경우 $form->isValid()
은 false를 반환합니다.
무엇이 여기에 있습니까?
업데이트 1 :
컨트롤러 (부분) :
private function buildTestForm() {
$form = $this->createFormBuilder()
->add('name','text')
->getForm();
return $form;
}
/**
* @Route("/test/show_form", name="test.form.show")
* @Method("GET")
*/
public function showFormTest()
{
$form = $this->buildTestForm();
return $this->render('TestBundle::form_test.html.twig', array('form' => $form->createView()));
}
/**
* @Route("/test/submit_form", name="test.form.submit")
* @Method("POST")
*/
public function formTest()
{
$form = $this->buildTestForm();
$form->bind($this->getRequest());
if ($form['_token']->isValid()) {
return new Response('_token is valid');
} else {
return new Response('_token is invalid');
}
}
템플릿
{# Twig template #}
<form action="{{ path('test.form.submit') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" name="go" value="Test Form" />
</form>
적어도 양식 코드가 누락되었습니다. – mpm
@mpm, true - 이제 문제를 재현 할 수있는 전체 코드가 추가되었습니다. –
CSRF 토큰 유효성 검사가 자동으로 수행됩니다. http://symfony.com/doc/current/book/forms.html#csrf-protection –