Метод getBasePath
Метод getBasePath класса Request
возвращает базовый путь текущего запроса.
Под базовым путём понимается часть URL,
которая идёт после домена, но до имени
исполняемого скрипта. Метод не принимает
параметров и возвращает строку. Если
приложение установлено в корне домена,
метод вернёт пустую строку.
Метод полезен, когда приложение развёрнуто
в подкаталоге, например /app или
/symfony/public. В этом случае
getBasePath помогает построить
корректные ссылки и понять, где именно
расположено приложение на сервере.
Синтаксис
public function getBasePath(): 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 RequestController extends AbstractController
{
#[Route('/request/base-path', name: 'request_base_path')]
public function basePath(Request $request): Response
{
$res = $request->getBasePath();
return new Response($res);
}
}
?>
Результат выполнения кода для приложения в корне домена:
""
Пример
Давайте сравним getBasePath с
getBaseUrl и 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 RequestController extends AbstractController
{
#[Route('/request/compare', name: 'request_compare')]
public function compare(Request $request): Response
{
$res = [
'basePath' => $request->getBasePath(),
'baseUrl' => $request->getBaseUrl(),
'pathInfo' => $request->getPathInfo(),
];
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода для приложения,
развёрнутого в подкаталоге /app
с адресом /app/index.php/user:
{"basePath":"\/app","baseUrl":"\/app\/index.php","pathInfo":"\/user"}
Как видно из результата, getBasePath
возвращает только базовый каталог, без имени
скрипта, в отличие от getBaseUrl.
Пример
Давайте используем getBasePath
для построения ссылки на статический файл:
<?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 RequestController extends AbstractController
{
#[Route('/request/asset', name: 'request_asset')]
public function asset(Request $request): Response
{
$res = $request->getBasePath() . '/images/logo.png';
return new Response($res);
}
}
?>
Результат выполнения кода для приложения
в подкаталоге /app:
"/app/images/logo.png"
Смотрите также
-
метод
getBaseUrl,
который возвращает базовый URL с именем скрипта -
метод
getPathInfo,
который возвращает путь после скрипта -
метод
getScriptName,
который возвращает имя исполняемого скрипта -
класс
Request,
который представляет HTTP-запрос