Метод removeTargetPath
Метод removeTargetPath принадлежит трейту TargetPathTrait и удаляет из сессии ранее сохранённый целевой путь. Он принимает один параметр - объект Request, из сессии которого нужно удалить запись. Метод ничего не возвращает. Обычно используется после успешной аутентификации, чтобы очистить сохранённый адрес и не перенаправлять пользователя на устаревший маршрут.
Синтаксис
removeTargetPath(Request $request): void
Пример
Давайте сохраним целевой путь, а затем удалим его из сессии:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class AuthController extends AbstractController
{
use TargetPathTrait;
public function login(Request $request): Response
{
$this->saveTargetPath($request->getSession(), 'main', '/admin');
$res = $this->getTargetPath($request->getSession(), 'main');
echo $res;
$this->removeTargetPath($request);
$res = $this->getTargetPath($request->getSession(), 'main');
var_dump($res);
return new Response('done');
}
}
?>
Результат выполнения кода:
/admin
NULL
Пример
Давайте удалим целевой путь после успешного входа пользователя:
<?php
namespace App\Security;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Util\TargetPathTrait;
class AppAuthenticator extends AbstractAuthenticator
{
use TargetPathTrait;
public function supports(Request $request): ?bool
{
return $request->isMethod('POST');
}
public function authenticate(Request $request): Passport
{
// ...
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
$targetPath = $this->getTargetPath($request->getSession(), $firewallName);
$this->removeTargetPath($request);
if ($targetPath) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse('/');
}
}
?>
После входа пользователь будет перенаправлен на сохранённый адрес, а сам путь удалён из сессии.
Смотрите также
-
трейт
TargetPathTrait,
который управляет сохранённым целевым путём -
метод
saveTargetPath,
который сохраняет целевой путь в сессии -
метод
getTargetPath,
который возвращает сохранённый целевой путь -
класс
Passport,
который представляет данные аутентификации