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