Recherche…


Introduction

Une route est comme mapper une URL à une action (fonction) dans une classe de contrôleur. La rubrique suivante se concentrera sur la création d'itinéraires, en passant des paramètres à la classe Controller via une route, à l'aide de YAML ou d'une annotation.

Remarques

Il est utile de voir ce qui est généré par le framework Symfony, celui-ci fournit des outils pour regarder toutes les routes d'une application spécifique.

A partir du document Symfony , utilisez (dans un shell):

php bin/console debug:router

De plus, vous pouvez voir toutes les informations de routes pertinentes dans le profileur Framework, dans le menu de routage: Symfony Profiler

Routage à l'aide de YAML

La configuration du routage est incluse dans votre fichier app/config/config.yml , par défaut dans le fichier app/config/routing.yml .

De là, vous pouvez créer un lien vers votre propre configuration de routage dans un bundle

# app/config/routing.yml

app:
    resource: "@AppBundle/Resources/config/routing.yml"

Il peut également contenir plusieurs routes globales d'application.

Dans votre propre ensemble, vous pouvez configurer des itinéraires qui servent deux objectifs:

  • Correspondance à une demande, de sorte que l'action correcte soit appelée pour la demande.
  • Générer une URL à partir des paramètres name et route.

Voici un exemple de configuration d'itinéraire YAML:

# src/AppBundle/Resources/config/routing.yml

my_page:
    path: /application/content/page/{parameter}
    defaults:
        _controller: AppBundle:Default:myPage
        parameter: 42
    requirements:
        parameter: '\d+'
    methods: [ GET, PUT ]
    condition: "request.headers.get('User-Agent') matches '/firefox/i'"

La route s'appelle my_page et appelle myPageAction du DefaultController dans AppBundle à la demande. Il a un paramètre, nommé parameter avec une valeur par défaut. La valeur n'est valide que lorsqu'elle correspond à l'expression rationnelle \d+ . Pour cette route, seules les méthodes HTTP GET et PUT sont acceptées. La condition est une expression dans l'exemple, la route ne correspondra pas, sauf si l'en-tête User-Agent correspond à Firefox. Vous pouvez effectuer toute logique complexe dont vous avez besoin dans l'expression en tirant parti de deux variables transmises à l'expression: context (RequestContext) et request (Symfony Request).

Un itinéraire généré avec la valeur du paramètre 10 peut ressembler à /application/content/page/10 .

Routage à l'aide d'annotations

La configuration du routage est incluse dans votre fichier app/config/config.yml , par défaut dans le fichier app/config/routing.yml .

De là, vous pouvez accéder aux contrôleurs dotés d'une configuration de routage annotée:

# app/config/routing.yml

app:
    resource: "@AppBundle/Controller"
    type:     annotation

Dans votre propre ensemble, vous pouvez configurer des itinéraires qui servent deux objectifs:

  • Correspondance à une demande, de sorte que l'action correcte soit appelée pour la demande.
  • Générer une URL à partir des paramètres name et route.

Voici un exemple de configuration de route annotée:

// src/AppBundle/Controller/DefaultController.php

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
 * @Route("/application")
 */
class DefaultController extends Controller {
    /**
     * @Route("/content/page/{parameter}",
     *        name="my_page",
     *        requirements={"parameter" = "\d+"},
     *        defaults={"parameter" = 42})
     * @Method({"GET", "PUT"})
     */
    public function myPageAction($parameter)
    {
        // ...
    }
}

Le contrôleur est annoté avec un itinéraire de préfixe , de sorte que tout itinéraire configuré dans ce contrôleur sera ajouté en préfixe.

L'itinéraire configuré s'appelle my_page et appelle la fonction myPageAction à la demande. Il a un paramètre, nommé parameter avec une valeur par défaut. La valeur n'est valide que lorsqu'elle correspond à l'expression rationnelle \d+ . Pour cette route, seules les méthodes HTTP GET et PUT sont acceptées.

Notez que le paramètre est injecté dans l'action en tant que paramètre de fonction.

Un itinéraire généré avec la valeur du paramètre 10 peut ressembler à /application/content/page/10 .

Routes de repos puissantes

Traditionnellement, vous pouvez utiliser le routage pour mapper la demande avec le composant de routage qui traitait les paramètres de demande et de réponse par le composant HttpFoundation .

De plus, un paramètre de route personnalisé peut être créé en utilisant FOSRestBundle pour étendre les fonctionnalités par défaut du composant de routage.

Ceci est utile pour créer des routes REST, ce qui est très utile pour spécifier comment transférer des données structurées comme un fichier XML ou json dans une requête (et une réponse).

Voir FOSRestBundle Doc pour plus d'informations, et en particulier cette annotation:

use FOS\RestBundle\Controller\Annotations\FileParam;

/**
 * @FileParam(
 *   name="",
 *   key=null,
 *   requirements={},
 *   default=null,
 *   description="",
 *   strict=true,
 *   nullable=false,
 *   image=false
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow