Une ancre <a href="#">
utilisera toujours une requête GET. Il n'y a aucun moyen de modifier cela. Mais, il est possible de simuler une requête PUT ou DELETE en utilisant Symfony. Symfony Forms va truquer le verbe en ajoutant un champ caché aux formulaires.
<input type="hidden" name="_method" value="PUT" />
Ensuite, en interne, il vérifie si le verbe est POST, vérifie le paramètre _method
et modifie le verbe POST du PUT. Cela fonctionne uniquement pour les formulaires HTML utilisant la méthode POST.
La même chose peut être faite pour les verbes GET, mais cela nécessite l'utilisation d'un écouteur d'événement. Voici un exemple:
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');
}
}
}
}
Et le service doit être inscrit une priorité plus élevée que le service router_listener
, qui correspond à la voie à un contrôleur.
services:
acme.verb.listener:
class: Acme\Bundle\Listener\VerbListener
tags:
- { name: kernel.event_listener,
event: kernel.request,
method: onKernelRequest,
priority: 100 }
Le lien peut maintenant être généré avec le paramètre _method
<a href="foo?_method=PUT"></a>
Impossible de faire comme un lien et ce n'est pas spécifique à Symfony2, c'est comme ça que fonctionne HTTP. – Inoryy
suffit de créer un formulaire avec un lien avec un "onclick" pour poster le formulaire –