Tutos & Astuces

Migration Symfony 2.1 à 2.2 : Attention au paramètre _method !

J’ai récement mis à jour un projet pour passer de Symfony 2.1 à 2.2 et à ma grande surprise, toutes mes routes n’acceptant que des méthodes autres que POST ou...

J’ai récement mis à jour un projet pour passer de Symfony 2.1 à 2.2 et à ma grande surprise, toutes mes routes n’acceptant que des méthodes autres que POST ou GET, qui sont appelées via un formulaire utilisant le paramètre _method ne fonctionnaient plus… Voici un exemple de controller ne fonctionnant plus:

    /**
     * @Route("/tickets/close", name="acme_demo_tickets_close")
     * @Method({"DELETE"})
     */
    public function ticketCloseAction()
    {
        // TODO: Some stuff...

        return array();
    }

Ainsi que le formulaire associé :

<form action="{{ path('acme_demo_tickets_close') }}" method="post">
    <input type="hidden" name="id" value="{{ ticket.id }}" />
    <input type="hidden" name="_method" value="delete" />
    <input type="hidden" name="_token" value="{{ csrf_token('ticket_close_' ~ ticket.id) }}" />
    <input type="submit" value="Clore ce ticket" />
</form>

Lors du test, j’obtenais l’erreur suivante :

No route found for « POST /tickets/close »: Method Not Allowed (Allow: DELETE)

Mon premier réflexe fut d’aller voir le fichier UPGRADE-2.2 sur le dépôt officiel de Symfony, et là je vois cette ligne:

The _method request parameter support has been disabled by default (call Request::enableHttpMethodParameterOverride() to enable it).

Après plusieurs recherches et une bonne discussion sur le chat IRC #symfony-fr (je vous le recommande ! ;)), on a découvert que le fichier app.php et app_dev.php ont été modifiés suite à cette mise à jour. Plus précisément dans ce commit.

Oui mais voilà, si on a déjà un projet existant sous 2.1 et qu’on le passe sous 2.2, les fichiers app.php et app_dev.php ne changent pas, et la bim bam badaboum, ça ne marche plus ! :p

Donc pour régler le problème, il suffit d’appliquer la modification du commit sur vos propres fichiers respectifs et ça devrait normalement fonctionner. 🙂

Peut-être avez vous aussi découvert d’autres surprises en passant à la 2.2, n’hésitez pas à me le faire savoir ! 😉

P.S. : Notez que cet article est valable que pour la version 2.2 uniquement, il y aura un système de configuration à partir de la 2.3 pour l’override de la méthode.

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0