2012-08-16 24 views
38

tengo este código de abajo:¿Cómo puedo tener parámetros opcionales en ruta Symfony2

/** 
* Lists all User entities. 
* 
* @Route("/{cid}",defaults={"cid" = null},name="user") 
* @Template() 
*/ 
public function indexAction($cid=null) 
{} 

Ahora si escribo site/user/1 entonces funciona, pero si escribo site/user/ que dice:

No route found 

Cómo ¿puedo decir que ambas rutas funcionan?

Respuesta

60

tratar de ir a site/user (notará ninguna barra invertida al final).

En general debería funcionar, tengo una configuración de trabajo relativamente similar.

Pero si todo lo demás falla siempre se puede definir varias rutas para la misma acción, es decir

/** 
* Lists all User entities. 
* 
* @Route("/", name="user_no_cid") 
* @Route("/{cid}", name="user") 
* @Template() 
*/ 
public function indexAction($cid=null) 
{ 
33

Usar un archivo yml para la configuración de enrutamiento, y añadir un valor predeterminado para id en sus parámetros de ruta así:

user: 
    pattern: /site/user/{id} 
    defaults: { _controller: YourBundle:Default:index, id: 1 } 

Véase la documentación here

+3

El PO es, obviamente, el uso de anotaciones de ruta en el controlador – phpguru

+7

Sin embargo, su respuesta me y algunos otros – Andrew

+3

Aviso para el futuro ayudado: 'clave pattern' está en desuso en Symfony 3 –

5

También puede hacerlo con un parámetro GET, por ejemplo,

/** 
* @param Request $request 
* 
* @return Response 
*/ 
public function displayDetailAction(Request $request) 
{ 
    if ($courseId = $request->query->get('courseId')) { 
Cuestiones relacionadas