Класс ParameterBag
Класс ParameterBag представляет собой контейнер для хранения параметров в виде пар ключ-значение. Он используется внутри объектов Request для работы с параметрами запроса, атрибутами и серверными переменными. Класс предоставляет удобные методы для безопасного извлечения данных: get, all, has, set, remove и типизированные методы getInt, getBoolean, getString.
Объект создаётся с массивом параметров, который можно изменять в процессе работы. Класс реализует интерфейсы IteratorAggregate и Countable, что позволяет перебирать параметры в цикле и получать их количество.
Синтаксис
<?php
use Symfony\Component\HttpFoundation\ParameterBag;
$bag = new ParameterBag(['key' => 'value']);
?>
Пример
Давайте создадим объект ParameterBag с параметрами и получим значение по ключу:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class BagController extends AbstractController
{
#[Route('/bag', name: 'bag_index')]
public function index(): Response
{
$bag = new ParameterBag(['name' => 'abcde', 'age' => 25]);
return new Response($bag->get('name'));
}
}
?>
Результат выполнения кода:
abcde
Пример
Давайте получим все параметры сразу с помощью метода all:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class BagController extends AbstractController
{
#[Route('/bag-all', name: 'bag_all')]
public function all(): Response
{
$bag = new ParameterBag(['name' => 'abcde', 'age' => 25]);
$res = $bag->all();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"name":"abcde","age":25}
Пример
Давайте проверим наличие параметра с помощью метода has:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class BagController extends AbstractController
{
#[Route('/bag-has', name: 'bag_has')]
public function has(): Response
{
$bag = new ParameterBag(['name' => 'abcde']);
$res = $bag->has('name');
return new Response($res ? 'true' : 'false');
}
}
?>
Результат выполнения кода:
true
Пример
Давайте установим новый параметр через метод set и удалим существующий через remove:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class BagController extends AbstractController
{
#[Route('/bag-modify', name: 'bag_modify')]
public function modify(): Response
{
$bag = new ParameterBag(['name' => 'abcde', 'age' => 25]);
$bag->set('city', 'hello');
$bag->remove('age');
$res = $bag->all();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"name":"abcde","city":"hello"}
Пример
Давайте воспользуемся типизированными методами getInt и getBoolean для получения значений с приведением типов:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class BagController extends AbstractController
{
#[Route('/bag-typed', name: 'bag_typed')]
public function typed(): Response
{
$bag = new ParameterBag(['age' => '25', 'active' => '1']);
$age = $bag->getInt('age');
$active = $bag->getBoolean('active');
return new Response($age . ' ' . ($active ? 'true' : 'false'));
}
}
?>
Результат выполнения кода:
25 true
Смотрите также
-
класс
InputBag,
который предназначен для работы с данными запроса -
класс
ParameterBag,
метод get которого извлекает значение по ключу -
метод
all,
который возвращает все параметры контейнера -
метод
has,
который проверяет наличие параметра по ключу