Метод getPathInfo
Метод getPathInfo класса Request возвращает
информационную часть пути запроса. Это часть URL,
которая идёт после базового пути скрипта и не включает
строку запроса. Метод не принимает параметров и
возвращает строку. Он часто используется для анализа
текущего адреса внутри контроллера или слушателя событий.
Синтаксис
public function getPathInfo(): string
Пример
Давайте получим путь запроса внутри контроллера и вернём его в ответе:
<?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('/article/info', name: 'article_info')]
public function info(Request $request): Response
{
$res = $request->getPathInfo();
return new Response($res);
}
}
?>
Результат выполнения кода для адреса /article/info:
/article/info
Пример
Давайте сравним getPathInfo с другими методами запроса и выведем разницу:
<?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('/article/show', name: 'article_show')]
public function show(Request $request): Response
{
$pathInfo = $request->getPathInfo();
$requestUri = $request->getRequestUri();
$queryString = $request->getQueryString();
$res = [
'pathInfo' => $pathInfo,
'requestUri' => $requestUri,
'queryString' => $queryString,
];
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода для адреса /article/show?page=2:
{"pathInfo":"/article/show","requestUri":"/article/show?page=2","queryString":"page=2"}
Как видно из результата, getPathInfo возвращает только
путь без строки запроса, тогда как getRequestUri
содержит её.
Пример
Давайте используем getPathInfo в слушателе событий для логирования пути запроса:
<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class RequestListener
{
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$pathInfo = $request->getPathInfo();
if ($pathInfo === '/article/info') {
// do something for this path
}
}
}
?>
В этом примере мы проверяем, что текущий путь равен
'/article/info', и выполняем нужное действие.
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
getRequestUri,
который возвращает URI запроса вместе со строкой запроса -
метод
getBaseUrl,
который возвращает базовый URL скрипта -
метод
getQueryString,
который возвращает строку запроса