+ All Categories
Home > Engineering > Symfony: Routing

Symfony: Routing

Date post: 21-Feb-2017
Category:
Upload: uvinum
View: 285 times
Download: 2 times
Share this document with a friend
22
Symfony Routing, the next level. @marcossegovia @obokaman
Transcript

SymfonyRouting, the next level.

@marcossegovia @obokaman

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

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 !

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…)

Request

Variables (defaults)

Prioridad (requirements)

Prioridad (requirements)

Verbos HTTP (methods)

Condiciones

- Que sea Chrome- Que la petición sea via GET

Chrome FirefoxSafari

Condiciones

- Que sea Chrome o Safari- Que la petición sea via GET

Chrome Firefox

Safari

Rutas dinámicas

• Creación de un Route Loader propio

Rutas dinámicas

• Uso de componentes específicos (CMF: Dynamic Router, ChainRouter…)

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)

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

Generar URLs

• Desde las plantillas TwigExisten 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 );

Debug de rutas: debug:router

Debug de rutas: router:match

Que el ritmo no pare, no pare no…

༼ ◕_◕ ༽ ༼ ◕_◕ ༽ ༼ ◕_◕ ༽ ༼ ◕_◕ ༽

PREGUNTAS?

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.

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 ;)

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 ;)


Recommended