Supongamos que vamos a hacer una página y queremos tener un apartado para un blog si el usuario va a la ruta /blog este coincide exactamente: con el controlador blogList():
/**
* @Route("/blog", name="blog_list")
*/
public function blogList()
{
return $this->json([
'name' => 'blog_list',
'controlador' => 'blogList'
]);
}
Cada entrada de nuestro blog va a estar asociada a una etiqueta, por ejemplo si queremos ingresar a todas las entradas que tengan una etiqueta, por ejemplo php o javascript para lograr esto utilizamos un comodín {nombre_comodín}:
/**
* @Route("/blog/{tag}", name="blog_tag")
*/
public function blogTag()
{
return $this->json([
'name' => 'blog_tag',
'controlador' => 'blogTag'
]);
}
Cuando tenemos muchas entradas, nos vemos a la necesidad de implementar un paginador en nuestro blog:
/**
* @Route("/blog/{page}", name="blog_page", requirements={"page"="\d+"})
*/
public function blogPage()
{
return $this->json([
'name' => 'blog_page',
'controlador' => 'blogPage'
]);
}
Si no agregamos el requirements={«page»=»\d+»} tendríamos un problema, ya que las rutas /blog/{tag} y /blog/{page} coincidiran. Con lo cual Symfony opta por mostrar el contenido de la primera ruta definida.
requirements={«page»=»\d+»} agrega el requisito que indica al comodín {page} que solo puede aceptar números definiendo esto a través de expresiones regulares.
También podemos dar un valor predeterminado definiendo el marcador de posición (placeholder) pasando el parámetro $page = 1, así en caso de querer redirigir al apartado de /blog el paginador empezará en la primera página con lo cual no habría necesidad de definir la ruta /blog y con controlador blogList() ya que /blog/{page} se encargaría del trabajo:
/**
* @Route("/blog/{page}", name="blog_page", requirements={"page"="\d+"})
*/
public function blogPage($page = 1)
{
return $this->json([
'name' => 'blog_page',
'controlador' => 'blogPage'
]);
}
Ahora puedes visualizar la ruta creada con la herramienta bin/console de la siguiente manera:
php bin/console debug:router
-------------------------- -------- -------- ------ -----------------------------------
Name Method Scheme Host Path
-------------------------- -------- -------- ------ -----------------------------------
_twig_error_test ANY ANY ANY /_error/{code}.{_format}
_wdt ANY ANY ANY /_wdt/{token}
_profiler_home ANY ANY ANY /_profiler/
_profiler_search ANY ANY ANY /_profiler/search
_profiler_search_bar ANY ANY ANY /_profiler/search_bar
_profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
_profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
_profiler_open_file ANY ANY ANY /_profiler/open
_profiler ANY ANY ANY /_profiler/{token}
_profiler_router ANY ANY ANY /_profiler/{token}/router
_profiler_exception ANY ANY ANY /_profiler/{token}/exception
_profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
default ANY ANY ANY /default
-------------------------- -------- -------- ------ -----------------------------------