錨<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」鏈接的表單來發布表單 –