Класс UrlGenerator
Класс UrlGenerator отвечает за генерацию
URL-адресов из именованных маршрутов. Он принимает
имя маршрута, массив параметров и тип ссылки
(абсолютная или относительная). Получить объект
можно через сервис router или через
RouterInterface. В контроллере удобнее
использовать метод generateUrl или функцию
url в Twig.
Синтаксис
$urlGenerator->generate(string $name, array $parameters = [], int $referenceType = self::ABSOLUTE_PATH)
Пример
Давайте сгенерируем URL по имени маршрута 'article_index':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(UrlGeneratorInterface $urlGenerator): Response
{
$url = $urlGenerator->generate('article_index');
return new Response($url);
}
}
?>
Результат выполнения кода:
"/"
Пример
Давайте передадим параметр name в маршрут
'/user/{name}':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'article_user')]
public function user(UrlGeneratorInterface $urlGenerator): Response
{
$url = $urlGenerator->generate('article_user', ['name' => 'abcde']);
return new Response($url);
}
}
?>
Результат выполнения кода:
"/user/abcde"
Пример
Давайте сгенерируем абсолютный URL, передав
константу ABSOLUTE_URL:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'article_user')]
public function user(UrlGeneratorInterface $urlGenerator): Response
{
$url = $urlGenerator->generate(
'article_user',
['name' => 'abcde'],
UrlGeneratorInterface::ABSOLUTE_URL
);
return new Response($url);
}
}
?>
Результат выполнения кода:
"http://localhost/user/abcde"
Смотрите также
-
метод
generate,
который генерирует URL по имени маршрута -
константа
ABSOLUTE_URL,
которая задаёт абсолютный тип ссылки -
класс
Router,
который управляет маршрутизацией приложения -
метод
generate,
который генерирует URL через роутер