Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Symfony: Routing

498 views

Published on

Introducción a las posibilidades que ofrece Symfony respecto a la generación y tratamiento de rutas

Published in: Engineering
  • Login to see the comments

  • Be the first to like this

Symfony: Routing

  1. 1. Symfony Routing, the next level. @marcossegovia @obokaman
  2. 2. Remembering • Routing Component • Mapea una request HTTP a unas variables definidas.
 Para acabar dispatcheando un controlador que invocará un método con una respuesta. Nuestros amigos: $ bin/console debug:router $ bin/console server:start
  3. 3. Remembering • Crear un nuevo proyecto Symfony • En el propio AppBundle, crear un nuevo Controller mediante annotations: • Devolver una Response `Hello World` • Devolver una Response con un Twig Template con un `Hello World` • Hacer lo anterior, pero esta vez definiendo las rutas con yaml BONUS: Ahora a través de cli !
  4. 4. Routing, ahora si Una ruta puede llegar a definir hasta 7 especificaciones: 2. Array de valores por defecto (defaults) 1. La url de la ruta, pudiendo especificar claves dinámicas. (path) 3. Array de requerimientos (requirements) 4. Array de opciones (options) 5. Un host (host) 6. Array de protocolos (schemes) (HTTP, HTTPS) 7. Array de métodos (methods) (GET, POST, HEAD…)
  5. 5. Request
  6. 6. Variables (defaults)
  7. 7. Prioridad (requirements)
  8. 8. Prioridad (requirements)
  9. 9. Verbos HTTP (methods)
  10. 10. Condiciones - Que sea Chrome
 - Que la petición sea via GET Chrome Firefox Safari
  11. 11. Condiciones - Que sea Chrome o Safari
 - Que la petición sea via GET Chrome Firefox Safari
  12. 12. Rutas dinámicas • Creación de un Route Loader propio
  13. 13. Rutas dinámicas • Uso de componentes específicos (CMF: Dynamic Router, ChainRouter…)
  14. 14. Combinación de múltiples definiciones de routing app/config/routing.yml app: resource: "@UvinumBundle/Controller"
 type: annotation
 
 home:
 path: /
 defaults: { _controller: UvinumBundle:Home:index }
 
 search:
 path: /{search_term}_s
 defaults: { _controller: UvinumBundle:Search:index }
 
 backend:
 resource: "routing/backend.yml"
 prefix: /backend/
 host: "admin.%base_domain%"
 
 frontend:
 resource: "routing/frontend.yml"
 prefix: /{_locale}/
 host: "%base_domain%"
 requirements:
 _locale: (es|ca|en)
  15. 15. Definición de idioma en app/config.yml app/config.yml parameters:
 locale: en
 languages: ['en','ca','es']
 base_domain: planningstar.com
 app/config.yml translator: { fallbacks: [%locale%] } app/Resources/views/index.html.twig {{ 'Departments of %company%'|trans({'%company%': company.name}) }} OR {% trans with {'%company%': company.name}%}Employees of %company%{% endtrans %} Traducciones en app/Resources/translations/messages.{locale}.yml Traducciones
  16. 16. Generar URLs • Desde las plantillas Twig
 Existen dos funciones principales: {{ path }} y {{ url }} <ul>
 <li>
 <a href="{{ url('home') }}">Home</a>
 </li>
 <li>
 <a href="{{ url('search', {'search_term': 'término de búsqueda'|escape}) }}">Búsqueda</a>
 </li>
 </ul> • Mediante el Router de Symfony $router = $this->get('router');
 $url = $router->generate(
 'frontend_user_profile',
 ['username' => 'obokaman'],
 Router::ABSOLUTE_URL
 );
  17. 17. Debug de rutas: debug:router
  18. 18. Debug de rutas: router:match
  19. 19. Que el ritmo no pare, no pare no… ༼ ◕_◕ ༽ ༼ ◕_◕ ༽ ༼ ◕_◕ ༽ ༼ ◕_◕ ༽ PREGUNTAS?
  20. 20. Os reto a… • Limpiar las URL que terminen en / • Definir una serie de rutas: • Annotations (Para que veáis como se definen) • Definición de distintas rutas en el propio yml • Resources de otros ymls con requirements • Habiendo definido una serie de URLs con prefijo de idioma, forzar que la raíz redirija a un idioma por defecto. Idem con los listados y su paginación.
  21. 21. Frontend Se definirá la aplicación para 3 idiomas distintos (a elegir). La respuesta del listado de artículos podrá ser también en .json. Sitemap, aprox: • /home • /articulos • /articulos/categoria • /articulos/pagina-actual (versión en HTML y en JSON) • /about 
 Pro Tip: Haced uso de los _locales y del _format ;)
  22. 22. Backend Sitemap, aprox: • /backend • /backend/{usuario}/profile • /backend/{usuario}/profile/edit • /backend/{usuario}/article/{slug} • /backend/{usuario}/article/{slug}/add • /backend/{usuario}/article/{slug}/edit • /backend/{usuario}/article/{slug}/delete 
 Pro Tip: Tened en cuenta que se sirva desde un host distinto (admin.localhost por ejemplo), los verbos para cada url, fijos si podéis meter un prefix e intentad separad en ymls distintos para temáticas distintas ;)

×