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