锚<a href="#">
总是使用GET请求。没有办法修改它。但是,可以使用Symfony伪造PUT或DELETE请求。
Symfony Forms会通过向表单添加隐藏字段来伪造动词。
<input type="hidden" name="_method" value="PUT" />
然后在内部它检查动词是POST,将检查_method
参数和改变从POST动词放。这仅适用于使用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
服务,该服务的路由相匹配到控制器的更高的优先级被登记。
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>
不可能做为链接,它不是特定于Symfony2,它是HTTP的工作原理。 – Inoryy
只需创建一个带有“onclick”链接的表单来发布表单 –