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'']);