Documentação do Symfony2
Renderizada do repositório symfony-docs-pt-BR no Github

Como usar métodos HTTP além do GET e POST em Rotas

O método de um pedido HTTP é um dos requisitos que pode ser verificado ao ver se ele corresponde a uma rota. Isto é introduzido no capítulo de roteamento do livro “Roteamento” com exemplos usando GET e POST. Você também pode usar outros verbos HTTP desta forma. Por exemplo, se você tem um post de blog, então, você pode usar o mesmo padrão de URL para mostrá-lo, fazer alterações e removê-lo pela correspondência nos métodos GET, PUT e DELETE.

Infelizmente, a vida não é tão simples assim, já que a maioria dos navegadores não suporta o envio de solicitações PUT e DELETE. Felizmente o Symfony2 fornece uma maneira simples de trabalhar com esta limitação. Ao incluir um parâmetro _method na query string ou nos parâmetros de um pedido HTTP, o Symfony2 irá usá-lo como o método ao fazer a correspondência de rotas. Isto pode ser feito facilmente em formulários com um campo oculto. Suponha que você tenha um formulário para editar um post no blog:

<form action="{{ path('blog_update', {'slug': blog.slug}) }}" method="post">
    <input type="hidden" name="_method" value="PUT" />
    {{ form_widget(form) }}
    <input type="submit" value="Update" />
</form>

O pedido submetido agora vai corresponder à rota blog_update e a updateAction será utilizada para processar o formulário.

Do mesmo modo, o formulário de exclusão pode ser alterado para parecer com o seguinte:

<form action="{{ path('blog_delete', {'slug': blog.slug}) }}" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    {{ form_widget(delete_form) }}
    <input type="submit" value="Delete" />
</form>

Ele irá então corresponder à rota blog_delete.