Symfony - генерировать url с параметром в контроллере
Я хочу создать Url прямо в моем контроллере. Я хочу, чтобы пользователь определял URL-адрес моего файла routing.yml, которому нужен параметр.
Я нашел этот код в разделе Cookbook (раздел маршрутизации):
$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
Но я не понимаю, что означает $router. Очевидно, что это не сработает.
Есть ли простой способ генерации URL-адреса маршрутизации с параметром в контроллере?
Ответы
Ответ 1
Это довольно просто:
public function myAction()
{
$url = $this->generateUrl('blog_show', array('slug' => 'my-blog-post'));
}
Внутри действия $this- > generateUrl является псевдонимом, который будет использовать маршрутизатор для получения желаемого маршрута, также вы можете сделать это, что то же самое:
$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
Ответ 2
Получите маршрутизатор из контейнера.
$router = $this->get('router');
Затем используйте маршрутизатор для создания Url
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
Ответ 3
Если вам нужны абсолютные URL-адреса, у вас есть третий параметр.
$product_url = $this->generateUrl('product_detail',
array(
'slug' => 'slug'
),
UrlGeneratorInterface::ABSOLUTE_URL
);
Не забудьте включить UrlGeneratorInterface.
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
Ответ 4
убедитесь, что ваш контроллер расширяет Symfony\Bundle\FrameworkBundle\Controller\Controller;
вы также должны проверить app/console debug:router
в терминале, чтобы узнать, какое имя symfony назвало маршрут
в моем случае он использовал минус вместо подчеркивания
i.e blog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);