Pim*_*Web 3 post put hyperlink http-method symfony
我想通过链接生成一个带有"PUT"或"POST"方法要求的网址<a href>
.
由于我使用框架服务器端,我使用假表单来执行此操作 - 使用PUT方法的示例:
<form action="someActionUri" method="post">
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="GO PUT" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是,我想使用一个简单的<a>
链接:(
锚<a href="#">
将始终使用GET请求.没有办法修改它.但是,可以使用Symfony伪造PUT或DELETE请求.
Symfony Forms将通过向表单添加隐藏字段来伪造动词.
<input type="hidden" name="_method" value="PUT" />
Run Code Online (Sandbox Code Playgroud)
然后在内部检查动词是否为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' );
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且必须以比router_listener
服务更高的优先级注册服务,该服务与到控制器的路由匹配.
services:
acme.verb.listener:
class: Acme\Bundle\Listener\VerbListener
tags:
- { name: kernel.event_listener,
event: kernel.request,
method: onKernelRequest,
priority: 100 }
Run Code Online (Sandbox Code Playgroud)
现在可以使用_method
参数生成链接
<a href="foo?_method=PUT"></a>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4297 次 |
最近记录: |