我有一个使用Symfony / Twig的网站,该网站在页面上列出了活跃的问题。每个问题的标题旁边都有一个“接受”链接。 “接受”链接是一个超文本链接,链接到包含问题标识符的路由(例如:/issues/{id}/accept
)。单击链接后,将调用accept
Symfony操作。这个Symfony动作只是将问题的状态从“新建”更改为“接受”,然后重定向到当前页面。
一切正常。
我唯一的问题是:href链接使用GET方法并在服务器端修改问题资源。 GET不应修改资源。对于“删除”链接,我可能会遇到相同的问题,该问题将使用GET方法(超链接)来调用删除资源的Symfony操作。
就我而言,可以使用超链接(GET方法)来修改/删除资源,还是我需要尝试使用POST方法(通过表单)或实现一些JavaScript,然后使用PUT或补丁?是否有任何简单的方法可以仅使用Symfony和Twig(不使用JS)来防止该问题?
答案 0 :(得分:2)
您无需在Symfony中使用JavaScript即可在没有JavaScript的情况下使用POST
,PUT
,PATCH
或DELETE
方法。只需使用常规的HTML表单即可。
有一个配置选项http_method_override
,可让您将HTTP方法设置为DELETE
,如下所示。
在树枝模板中:
{{ 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