Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Routing Symfony et Symfony CMF

Routing Symfony et Symfony CMF

Jérôme Tamarelle

July 15, 2014
Tweet

More Decks by Jérôme Tamarelle

Other Decks in Programming

Transcript

  1. Routing ? « Le Composant de Routage fait correspondre une

    requête HTTP à un ensemble de variables de configuration. » (Readme) « Le routeur fait correspondre l'URL entrante à une route spécifique et retourne l'information à propos de la route, incluant le contrôleur qui devrait être exécuté. » (Cookbook) 3 3 mardi 15 juillet 14
  2. • $router-­‐>setRequestContext($context); $parameters  =  $router-­‐>match('/hello/ paris'); array  (    

       '_route'  =>  'hello',        '_controller'  =>  'say_hello',        'name'  =>  'paris', ); • Le composant est autonome, utilisable sans autre dépendance. UrlMatcher 5 5 mardi 15 juillet 14
  3. • use Symfony\Component\HttpFoundation \Request; $matcher->matchRequest(Request $request); • « While UrlMatcherInterface

    is only for matching URLs with routes, RequestMatcherInterface allows to match RequestMatcher (2.1+) 6 6 mardi 15 juillet 14
  4. Configuration des Routes #  routing.yml hello:        path:

         /hello/{name}        defaults:    {  _controller:  say_hello,   name:  world  }        requirements:                name:    \w+ Les routes sont compilées en PHP optimisé par le RouteCompiler. 7 7 mardi 15 juillet 14
  5. Chaque fichier de configuration (YAML, XML, Annotations ou PHP) gènère

    une « RouteCollection » qui peut être importée dans une autre. #  main_routing.yml hello:        resource:  "routing.yml"        prefix:      /demo 8 8 mardi 15 juillet 14
  6. • L’URL : path (/) • Le domaine : host

    (afsy.fr) • La méthode : method (GET, POST, ...) • Le protocole : scheme (http, https) Une route peut tester : 9 9 mardi 15 juillet 14
  7. UNE ROUTE NE TESTE PAS : La valeur d’un en-tête

    HTTP L’authentification de l’utilisateur Une valeur dynamique en base de données 10 10 mardi 15 juillet 14
  8. Attributs spéciaux _route Nom de la route _controller Nom logique

    transformé en callable par le ControllerResolver _locale Code le langue analysé par le LocaleListener _format Content-Type de la réponse _template Template utilisé après le contrôleur par SensioFrameworkExtraBundle 12 12 mardi 15 juillet 14
  9. Rediriger une URL sans contrôleur spécifique root: pattern: / defaults:

    _controller: FrameworkBundle:Redirect:urlRedirect path: /app permanent: true http://symfony.com/fr/doc/current/cookbook/routing/redirect_in_config.html 13 13 mardi 15 juillet 14
  10. Afficher un template sans contrôleur spécifique about: pattern: /about defaults:

    _controller: FrameworkBundle:Template:template template: AppBundle:About:index.html.twig 14 14 mardi 15 juillet 14
  11. Comment gérer des URL dynamiques ? Home : http://www.lexpress.fr Liste

    : http://lentreprise.lexpress.fr/high-tech-innovation/liste.html Article : http://www.lexpress.fr/emploi/conseils-emploi/rechercher-un-emploi- pendant-l-ete-une-bonne-idee_1558541.html Vidéo : http://videos.lexpress.fr/actualite/societe/video-le-defile-du-14-juillet-vu- de-l-interieur-d-un-helicoptere_1559355.html Diaporama : http://lentreprise.lexpress.fr/diaporama/diapo-photo/creation- entreprise/idees-business/quatre-petites-start-up-dans-la-prairie_1546463.html 15 15 mardi 15 juillet 14
  12. ChainRouter Appel plusieurs routeurs par ordre de priorité jusqu’à trouver

    celui qui match la requête. use Symfony\Cmf\Component\Routing\ChainRouter; $chainRouter = new ChainRouter(); $chainRouter->add(new DynamicRouter(...), 100); $chainRouter->add(new DefaultRouter(...), 0); $chainRouter->matchRequest($request); 17 17 mardi 15 juillet 14
  13. NestedMatcher Routes stockées en BDD (PHPCR ou autre) Charge uniquement

    les routes pouvant potentiellement matcher la requête $routeCollection = $routeProviter ->getRouteCollectionForRequest($request); Puis compile les routes et confronte la requête 18 18 mardi 15 juillet 14
  14. DynamicRouter Encapsule un router Exécute des « Route Enhancers »

    pour enrichir les attributs du routing : Définir le contrôleur Renommer des attributs Définir des valeurs par défaut 19 19 mardi 15 juillet 14
  15. Attributs spéciaux du Routing CMF _route_object Objet Route retenu _content

    Contenu associé à la requête _template Nom du template à utiliser 21 21 mardi 15 juillet 14