Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas con rutas en Silex

2 de diciembre de 2014

Hola a todos. Tengo un problema.

Les comento, de repente una de las ruta definidas en uno de los métodos del controlador resultó con este error.

An exception has been thrown during the rendering of a template ("Parameter "id" for route 
"cuenta_usuario" must match "[^/]++" ("" given) to generate a corresponding URL.") in 
"views/usuarios.html" at line X.

Cuál es mi intensión:

Desde el controlador genero una ruta (ruta/{id}) con un valor:

$controllers->match('ruta/{id}', function (Request $request, $id) use ($app) {
    ...
    return ... ;
})->bind('ruta');

En una de las vistas quiero usar la ruta {{ path('ruta', {id: dato.id }) }}. Al usarla así me genera el error de arriba. Si a la misma ruta le pongo un valor normal, en lugar del array que viene desde la base de datos la ruta funciona. Deja de presentar el error. Pero así no la necesito.

Quedo atento a su ayuda.

Saludos!


Respuestas

#1

Listo. Solución.

Twig, en su URL no recibe valores nulos. Si el id, o el dato que se pasa como parámetro en Twig, viene null presenta este problema.

¿Qué hice?

{% set id = usuario.id_prospecto %}
 
{% if id == null %}
    {% set id = true %}
{% endif %}

Descubrí que uno de los datos enviados desde la base de datos no existía. Al no existir el array me enviaba el id en null.

Saludos!

@cristian_angulo

3 diciembre 2014, 0:04
#2

Para tratar con los valores de tipo null, en Twig tienes un filtro llamado default que asigna un valor por defecto a una variable cuando su contenido es null.

Así que en vez de esto:

{% set id = usuario.id_prospecto %}
 
{% if id == null %}
    {% set id = true %}
{% endif %}
 
{{ path('ruta', {id: id }) }}

Podrías usar esto:

{{ path('ruta', {id: usuario.id_prospecto|default(true) }) }}

@javiereguiluz

3 diciembre 2014, 9:30