Я знаю, что обычный способ отображать скрытый ввод токена CSRF с помощью form_rest
, но есть ли способ сделать сам только? Я переопределил {% block field_widget %}
в теме, чтобы сделать часть дополнительного текста. Но поскольку токен CSRF также отображается в поле ввода, и я получил фрагмент текста, который мне не нужен рядом со скрытым полем. Поэтому я хотел бы сделать его отдельно с аргументом, который говорит ему, чтобы он не отображал этот текст.
Как визуализировать вход CSRF в веточке?
Ответ 1
вы можете сделать это с помощью {{ form_widget(formView._token) }}
Ответ 2
Без использования объекта формы вы можете напрямую перенести маркер:
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
где 'authenticate' - ваше имя формы.
Работает в Symfony 2.x и 3.x
Ответ 3
Или вы можете просто использовать это:
{{ form_row(form._token) }}
Это автоматически генерирует надлежащие скрытые элементы HTML, то есть правильную структуру HTML и имена полей, в зависимости от типа формы, которую вы используете.
Ответ 4
Мне нужно было сделать вход csrf внутри Twig, чтобы я мог использовать его для операций Удалить.
Использование {{ csrf_token('authenticate') }}
в соответствии с ответом @YuryPliashkou дает мне неправильный токен (тот, который действителен только для логинов!)
Что сработало для меня, это {{ csrf_token('form') }}
, который дает мне правильный токен csrf, который я передал бы затем контроллеру через ajax.
<span id="csrf_token" data-token="{{ csrf_token('form') }}"></span>
// my ajax call
$.ajax({
url: localhost/admin/product/4545, // 4545->id of the item to be deleted
type: 'POST',
data: {
"_method": "DELETE",
"form[_token]": $("#csrf_token").data("token") // passed csrf token here
},
success: function(result) {
// Do something
}
});
Подтвердил свою работу над Symfony 3.x.
Ответ 5
не нашел, что решение работало для меня, было найдено и протестировано и работало для моего значения Simfony3 = "{{_token}}" в примере
<form name="form" method="post" action="{{ path('blog_show', { 'id': blog.id }) }}">
<input name="_method" value="DELETE" type="hidden">
<input class="btn btn-danger" value="Delete" type="submit">
<input id="form__token" name="form[_token]" value="{{ _token }}" type="hidden">
</form>
подробнее о scrf можно посмотреть здесь: Создание форм вручную в Symfony2, но по-прежнему использовать его CSRF и isValid() функционально