Метод getBag
Метод getBag класса Session возвращает
объект хранилища BagInterface для указанного
типа данных сессии. Первым параметром передаётся
имя хранилища. Чаще всего используются хранилища
'attributes' для обычных данных и
'flashes' для flash-сообщений. Метод удобен,
когда нужно работать с сессией через единый объект
Session, а не через отдельные сервисы.
Синтаксис
public function getBag(string $name): BagInterface
Параметр name задаёт имя хранилища. Если
хранилище с таким именем ещё не создано, Symfony
создаст его автоматически и вернёт пустой объект.
Пример
Давайте получим хранилище 'attributes' и
запишем в него значение по ключу 'user':
<?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', name: 'article_index')]
public function index(Request $request): Response
{
$session = $request->getSession();
$bag = $session->getBag('attributes');
$bag->set('user', 'abcde');
return new Response($bag->get('user'));
}
}
?>
Результат выполнения кода:
abcde
Пример
Давайте получим список всех ключей хранилища
'attributes':
<?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/keys', name: 'article_keys')]
public function keys(Request $request): Response
{
$session = $request->getSession();
$bag = $session->getBag('attributes');
$bag->set('user', 'abcde');
$bag->set('page', 1);
$bag->set('active', true);
return new Response(implode(', ', array_keys($bag->all())));
}
}
?>
Результат выполнения кода:
"user, page, active"
Пример
Давайте получим хранилище 'flashes' и
добавим в него flash-сообщение:
<?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/flash', name: 'article_flash')]
public function flash(Request $request): Response
{
$session = $request->getSession();
$flashes = $session->getBag('flashes');
$flashes->add('success', 'article saved');
return new Response(implode(', ', $flashes->get('success')));
}
}
?>
Результат выполнения кода:
"article saved"
Смотрите также
-
класс
Session,
который управляет данными сессии -
метод
get,
который читает значение из сессии -
метод
set,
который записывает значение в сессию -
метод
getFlashBag,
который возвращает хранилище flash-сообщений