Метод hasSession
Метод hasSession класса Request возвращает
true, если для текущего запроса была установлена
сессия, и false в противном случае. Метод не
принимает параметров. Сессия считается установленной,
если ранее был вызван метод setSession или
сессия была инициализирована фреймворком автоматически
через сервис SessionInterface.
Синтаксис
$res = $request->hasSession();
Пример
Давайте проверим, установлена ли сессия для запроса, полученного из стека запросов:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(RequestStack $requestStack): Response
{
$request = $requestStack->getCurrentRequest();
if ($request->hasSession()) {
return new Response('session exists');
}
return new Response('no session');
}
}
?>
Результат выполнения кода:
"session exists"
Пример
Давайте получим сессию только после проверки её наличия
через hasSession, чтобы избежать ошибки:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/count', name: 'article_count')]
public function count(RequestStack $requestStack): Response
{
$request = $requestStack->getCurrentRequest();
if (!$request->hasSession()) {
return new Response('session is not available');
}
$session = $request->getSession();
$session->set('counter', 1);
return new Response('counter: ' . $session->get('counter'));
}
}
?>
Результат выполнения кода:
"counter: 1"
Пример
Давайте создадим запрос вручную и убедимся, что без
вызова setSession метод hasSession вернёт
false:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/manual', name: 'article_manual')]
public function manual(): Response
{
$request = new Request();
$before = $request->hasSession();
$request->setSession(new Session());
$after = $request->hasSession();
return new Response(
'before: ' . var_export($before, true) . ', ' .
'after: ' . var_export($after, true)
);
}
}
?>
Результат выполнения кода:
"before: false, after: true"
Смотрите также
-
метод
getSession,
который возвращает объект сессии -
класс
Request,
который представляет HTTP-запрос -
класс
RequestStack,
который хранит стек запросов -
метод
getCurrentRequest,
который возвращает текущий запрос