yml route component symfony symfony-routing

component - symfony router



Symfony-genera url con parĂ¡metro en el controlador (4)

Quiero generar una Url directamente en mi controlador. Quiero utilizar una url definida en mi archivo routing.yml que necesita un parámetro.

Encontré ese código en el libro de cocina (sección Routage):

$params = $router->match(''/blog/my-blog-post''); // array(''slug'' => ''my-blog-post'', ''_controller'' => ''AcmeBlogBundle:Blog:show'') $uri = $router->generate(''blog_show'', array(''slug'' => ''my-blog-post'')); // /blog/my-blog-post

Pero no entiendo a qué se refiere el router $. Obviamente, no funciona. ¿Hay una manera simple de generar una url de enrutamiento con un parámetro en un controlador?


Es bastante simple:

public function myAction() { $url = $this->generateUrl(''blog_show'', array(''slug'' => ''my-blog-post'')); }

Dentro de una acción, $ this-> generateUrl es un alias que usará el enrutador para obtener la ruta deseada, también podría hacer esto de la misma manera:

$this->get(''router'')->generate(''blog_show'', array(''slug'' => ''my-blog-post''));


Obtener el enrutador del contenedor.

$router = $this->get(''router'');

Luego usa el enrutador para generar la URL

$uri = $router->generate(''blog_show'', array(''slug'' => ''my-blog-post''));


Si quieres URL absolutas, tienes el tercer parámetro.

$product_url = $this->generateUrl(''product_detail'', array( ''slug'' => ''slug'' ), UrlGeneratorInterface::ABSOLUTE_URL );

Recuerde incluir UrlGeneratorInterface.

use Symfony/Component/Routing/Generator/UrlGeneratorInterface;


asegúrese de que su controlador amplíe Symfony/Bundle/FrameworkBundle/Controller/Controller;

también debe verificar la app/console debug:router en la terminal para ver qué nombre ha llamado Symfony la ruta

en mi caso usó un signo menos en lugar de un guión bajo

es decir, blog-show

$uri = $this->generateUrl(''blog-show'', [''slug'' => ''my-blog-post'']);