Хорошо, я так сильно искал Google, но все, что я нашел, говорит о формах Symfony в контексте обычной обработки формы Symfony (например, form_widget(), создавая класс FormType и т.д.). У меня много таких форм в моем проекте Symfony, они отлично работают.
НО:
У меня также есть довольно сложные формы AJAX, которые я хотел бы создать вручную (используя простой старый HTML и JS). Я все еще хочу использовать возможности проверки Symfony Form и защиту CSRF. Однако по какой-то причине я не могу заставить CSRF работать при использовании isValid() для вручную созданных форм.
Это пример того, что я пытаюсь выполнить:
На моем контроллере я установил _token:
$_token = $this->get('form.csrf_provider')->generateCsrfToken('form');
По-моему (созданная форма вручную) (получение _token с моего контроллера представления):
<html>
<form method="post">
<input type="hidden" name="form[_token]" value="{{ _token }}">
<input type="hidden" name="form[id]" value="1">
<input type="submit" value="Submit">
</form>
</html>
В моем контроллере действий (когда представленная форма, я ПЫТАЮСЬ сделать следующее):
//Create form (for validation purposes)
$form = $this->get('form.factory')
->createBuilder('form', array('id' => $request->get('id')))
->add('id', 'hidden')
->getForm();
//Bind form
$form->bind($request)
//Validate form
if($form->isValid()) {
//... save data
}
//Return response...
По какой-то причине я не могу заставить isValid() работать, я подозреваю, что мой _token не используется должным образом, но я не понимаю, почему. Кто-нибудь на самом деле сделал вручную работу с компонентами Symfony? Есть ли у кого-нибудь предложения о том, как сделать эту работу?
В принципе, я хочу выполнить следующее:
-
Вручную создайте HTML-форму (с защитой CSFR и без функций виджета формы TWIG)
-
Используйте функцию формы Symfony для проверки этой формы
Спасибо.