Не использовать Symfony вообще, а генерировать свой собственный токен?
Вам не нужно использовать тематику форм Symfony при создании формы. Я всегда создаю свои собственные теги форм.
- Вы хотите настроить свой выбор? Можно сделать тоже
- Вы хотите использовать поля, которые не входят в сущность, также могут быть выполнены ...
Формы Symfony не такие строгие, как вы думаете.
Скорее всего, у вас нет "ноу-хау" по этому вопросу.
Контроллер
public function customFormAction(Request $request) {
$form=$this->createFormBuilder()
->setAction($this->generateUrl('route_name'))
->setMethod('POST')
->add("customField", ChoiceType::class, array(
'choices'=>array(
'1'=>'Choice 1',
'2'=>'Choice 2',
'3'=>'Choice 2',
),
'required'=>true,
'mapped'=>false, //Isn't mapped to any entity
))
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$customField=$form->get('customField')->getData();
//do your stuff
}
return $this->render('route_name', array(
'form'=>$form->createView(),
));
}
Вид веточки
<form action="{{ form.vars.action }}" method="{{ form.vars.method }}">
<div class="input-field">
<select id="{{ form.customField.vars.id }}" name="{{ form.customField.vars.full_name }}" class="my_classes">
{% for option in form.customField.vars.choices %}
<option data-attr="my_attributes" value="{{ option.value }}">{{ option.label }}</option>
{% endfor %}
</select>
</div>
<input name="{{ form._token.vars.full_name }}" value="{{ form._token.vars.value }}" type="hidden">
</form>
При этом я почти не использую шаблонные ветки, у меня все еще есть токен CSRF, а Symfony едва обрабатывает форму (он будет проверять только токен CSRF)