Symfony2.3. Pasar valores intenger al controlador desde Twig

740 views
Skip to first unread message

wharshall

unread,
Jun 25, 2014, 2:26:55 AM6/25/14
to symfo...@googlegroups.com
Buenas,

Trabajando con Symfony2.3 estoy intentando pasar a un controlador, desde el routing, un parámetro integer. Me explico algo mejor.

En mi plantilla twig tengo:
...<a href="{{ path('products_category', {'category_slug': category.slug, 'category_id': category.id }) }}">View</a>

En mi fichero routing.yml:

products_category:
   pattern: /catalog/{category_slug}
   defaults: { _controller: ProductBundle:Default:productsByCategory, category_id : {category_id} }

Y en el controlador tengo:
public function productsByCategoryAction ($category_slug, $category_id) {
...

Mi intención es  poder utilizar dentro del controlador la variable $category_id con el id que debe llegarle de la template twig, a través del routing, pero no funciona. ¿Alguien sabe si es posible pasar un entero desde twig al controlador de esta manera.

Gracias.

Absalón Valdés Ormeño

unread,
Jun 25, 2014, 3:38:04 AM6/25/14
to symfo...@googlegroups.com
Hola

¿Por qué no poner ambos parámetros en la ruta? Si no hay una variable en el pattern entonces no será identificada como quieres. En tu ejemplo solo reconocerá category_slug pero category_id siempre quedará como nulo ya que simplemente no va en los parámetros identificados en el pattern.

Por otra parte, al pasarle dos parámetros a la funcion path y que el pattern asociado al nombre 'products_category' tenga solo UN placeholder (category_slug) ya limitas a que el segundo parámetro (category_slug) sea completamente ignorado y me sorprende que no lance una excepción.

Joomla hace algo como /catalog/54-nombre-articulo, donde el 54 es el ID y el resto es el slug. Luego puedes separar fácilmente ese parámetro en sus dos partes en el controlador:

list($id, $slug) = explode('-', $slug, 2);

Y no, el flujo siempre es Request -> Routing -> Controller -> View -> Response. Yendo en esa dirección únicamente no puedes relacionar la capa de vista (twig) con el routing.

O simplemente, por qué no usar solo el slug? Si es único puedes usarlo como campo indexado en la DB para optimizar y buscar solo con él, sin necesidad del ID.

Saludos









--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Absalon Valdés Ormeño.
http://es.gravatar.com/absalonvaldes

Sergio de Candelario

unread,
Jun 25, 2014, 4:01:50 PM6/25/14
to symfo...@googlegroups.com
Como bien a comentado Absalon o pones el parámetro en el routing o lo quitas del controlador y lo coges por get, ya que todos los parámetros que se pasen a la ruta y no es´ten en el routing ni en el controlador se pueden obtener a través de ¢request->query->('param_name')
Reply all
Reply to author
Forward
0 new messages