gpt4 book ai didi

Symfony2 链接 'post' 或 'delete' 或 'put' 方法

转载 作者:行者123 更新时间:2023-12-01 10:53:08 24 4
gpt4 key购买 nike

我想通过 <a href> 生成一个带有“PUT”或“POST”方法要求的 url链接。

由于我在服务器端使用框架,所以我使用了一个伪造的表单来执行此操作 - 使用 PUT 方法的示例:

<form action="someActionUri" method="post">
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="GO PUT" />
</form>

但是,我想使用一个简单的 <a>链接:(

最佳答案

一个 anchor <a href="#">将始终使用 GET 请求。没有办法修改它。但是,可以使用 Symfony 伪造 PUT 或 DELETE 请求。

Symfony Forms 将通过向表单添加隐藏字段来伪造动词。

<input type="hidden" name="_method" value="PUT" />

然后在内部检查动词是否为 POST,检查 _method参数并将动词从 POST 更改为 PUT。这仅适用于使用 POST 方法的 HTML 表单。

对于 GET 动词也可以这样做,但它需要使用事件监听器。这是一个例子:

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class VerbListener
{
public function onKernelRequest ( GetResponseEvent $event )
{
$request = $event->getRequest();

if ( HttpKernel::MASTER_REQUEST === $event->getRequestType()
&& $request->getMethod() === 'GET' )
{
if ( $request->query->get('_method') === 'PUT' ) {
$request->setMethod( 'PUT' );
}
}
}
}

并且该服务必须以比 router_listener 更高的优先级注册服务,匹配到 Controller 的路由。

services:
acme.verb.listener:
class: Acme\Bundle\Listener\VerbListener
tags:
- { name: kernel.event_listener,
event: kernel.request,
method: onKernelRequest,
priority: 100 }

现在可以使用 _method 生成链接参数

<a href="foo?_method=PUT"></a>

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com