Метод saveTargetPath
Метод saveTargetPath принадлежит трейту TargetPathTrait и сохраняет
целевой URL в сессии. Первым параметром передаётся объект запроса
Request, вторым - идентификатор файрвола (например, main),
третьим - путь, на который нужно перенаправить пользователя после
входа в систему. Обычно этот метод вызывается в слушателе событий
или в аутентификаторе, когда пользователь пытается получить доступ
к защищённой странице, но ещё не авторизован.
Синтаксис
$res = $this->saveTargetPath(Request $request, string $firewallName, string $targetPath);
Пример
Давайте сохраним целевой путь '/user/profile' в сессии
для файрвола 'main':
<?php
namespace App\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class TargetPathSaver
{
use TargetPathTrait;
public function save(Request $request): void
{
$firewallName = 'main';
$targetPath = '/user/profile';
$this->saveTargetPath($request, $firewallName, $targetPath);
}
}
?>
Пример
Давайте проверим, что путь действительно сохранён, прочитав его
через метод getTargetPath:
<?php
namespace App\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class TargetPathChecker
{
use TargetPathTrait;
public function check(Request $request): string
{
$firewallName = 'main';
$this->saveTargetPath($request, $firewallName, '/user/profile');
return $this->getTargetPath($request, $firewallName) ?? 'empty';
}
}
?>
Результат выполнения метода check:
"/user/profile"
Пример
Давайте сохраним путь через слушатель события RequestEvent,
чтобы автоматически запоминать страницу при редиректе на форму входа:
<?php
namespace App\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class TargetPathListener implements EventSubscriberInterface
{
use TargetPathTrait;
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (!$request->isMethod('GET')) {
return;
}
$firewallName = 'main';
$targetPath = $request->getPathInfo();
$this->saveTargetPath($request, $firewallName, $targetPath);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
}
?>
Теперь при переходе на '/user/profile' путь сохранится
в сессии, и после входа пользователь вернётся именно на эту страницу.
Смотрите также
-
трейт
TargetPathTrait,
который предоставляет методы для работы с целевым путём -
метод
getTargetPath,
который возвращает сохранённый целевой путь -
метод
removeTargetPath,
который удаляет сохранённый целевой путь -
класс
Passport,
который представляет паспорт аутентификации