Метод match класса Router
Метод match класса Router принимает объект
Request и возвращает массив с информацией о
маршруте, который соответствует данному запросу.
Первым параметром передаётся объект запроса. Если
совпадение не найдено, метод выбрасывает исключение
ResourceNotFoundException.
Синтаксис
$router->match(Request $request)
Пример
Давайте получим информацию о маршруте для адреса '/user/abcde':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'article_user')]
public function user(string $name): Response
{
return new Response($name);
}
}
?>
Теперь получим данные маршрута через метод match:
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RouterInterface;
class RouteMatcher
{
public function __construct(
private RouterInterface $router,
) {
}
public function getRouteInfo(): array
{
$request = Request::create('/user/abcde');
$res = $this->router->match($request);
return $res;
}
}
?>
Результат выполнения кода:
[
'_route' => 'article_user',
'name' => 'abcde',
]
Пример
Давайте обработаем ситуацию, когда маршрут не найден:
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\RouterInterface;
class RouteMatcher
{
public function __construct(
private RouterInterface $router,
) {
}
public function getRouteInfo(): array
{
$request = Request::create('/unknown');
try {
$res = $this->router->match($request);
} catch (ResourceNotFoundException $e) {
$res = ['error' => 'Route not found'];
}
return $res;
}
}
?>
Результат выполнения кода:
["error" => "Route not found"]
Смотрите также
-
класс
Router,
который управляет маршрутизацией приложения -
метод
generate,
который генерирует URL по имени маршрута -
метод
getRouteCollection,
который возвращает коллекцию маршрутов -
атрибут
Route,
который вешает метод контроллера на URL