Подтвердить что ты не робот

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-адреса маршрутизации с параметром в контроллере?

4b9b3361

Ответ 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']);