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

Routing Symfony et Symfony CMF

Routing Symfony et Symfony CMF

Avatar for Jérôme Tamarelle

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