Symfony - Twig - 修改或删除资源和 returns 页面的超文本 link

Symfony - Twig - Hypertext link that modifies or deletes a resource and returns a page

我有一个 Symfony/Twig 的网站,它在一个页面上列出了活跃的问题。每期的标题旁边都有一个 "Accept" link。 "Accept" link 是超文本 link linking 到包含问题标识符的路由(例如:/issues/{id}/accept)。单击 link 时,将调用 accept Symfony 操作。此 Symfony 操作只是将问题的状态从 "New" 更改为 "Accept" 并重定向到当前页面。

一切正常。

我唯一的问题是:href link 使用 GET 方法并在服务器端修改问题资源。 GET 不应修改资源。对于 "Remove" link,我可能会遇到同样的问题,它会使用 GET 方法 (hyperlink) 来调用删除资源的 Symfony 操作。

就我而言,可以使用 hyperlink(GET 方法)来 modify/remove 资源,还是我需要尝试使用 POST 方法(使用表格)或实施一些 JavaScript 然后使用 PUT 或 PATCH ?有什么简单的方法可以仅使用 Symfony 和 Twig(不使用 JS)来防止该问题吗?

您不需要使用 JavaScript 来使用没有 JavaScript 的 POSTPUTPATCHDELETE 方法在 Symfony 中。只需使用常规 HTML 形式。

有一个配置选项 http_method_override 允许您将 HTTP 方法设置为 DELETE,如下所示。

在 Twig 模板中:

{{ form_start(form, {'action': path('target_route'), 'method': 'DELETE'}) }}

在控制器中创建期间:

$form = $this->createForm(TaskType::class, $task, [
    'action' => $this->generateUrl('target_route'),
    'method' => 'DELETE',
]);

在文档章节中阅读更多相关信息:Changingg the Action and HTTP Method