Вы должны использовать встроенную возможность Symfony 1.4 для создания ссылки «Удалить», которая использует JavaScript для выполнения законного запроса POST к вашему маршруту удаления и передает действительный токен CSRF.
Следующеепример предполагает, что у вас есть маршрут с именем file_delete
, который принимает параметр id
, представляющий собой число:
// apps/frontend/config/routing.yml
file_delete:
url: /file/:id/delete
param: { module: file, action: delete }
requirements:
id: \d+
Создайте ссылку «Удалить», которая правильно выполняет POST и добавляет маркер CSRF:
<?php
echo link_to('Delete', 'file_delete', array(
'id' => $file->getId(),
), array(
'method' => 'delete',
'confirm' => 'Are you sure you want to delete this file?',
));
?>
Хотя приведенный выше код работает, я обнаружил ошибку, которая все еще существует в Symfony 1.4.18, которая может привести к тому, что вы увидите _csrf_token [Required.]
после нажатия на ссылку Удалить.Это связано с тем, что Symfony генерирует JavaScript с синтаксической ошибкой при передаче апострофа в опцию confirm
(например, Are you sure you're ready to proceed?
).Чтобы убедиться, что синтаксическая ошибка JavaScript является виновной, откройте консоль браузера и нажмите на ссылку, а затем просмотрите сообщение об ошибке, которое будет отображаться быстро, прежде чем оно будет перенаправлено.В моем случае было легко удалить апостроф из текста confirm
, который исправил проблему.