Метод getEnum класса InputBag
Метод getEnum класса InputBag возвращает значение
параметра запроса, преобразованное в объект перечисления (enum).
Первым параметром передаётся имя ключа, вторым - класс enum,
в который нужно преобразовать значение. Третьим параметром
можно передать значение по умолчанию, которое вернётся,
если ключ отсутствует в запросе.
Метод удобен, когда параметр запроса должен принимать
одно из заранее известных значений, описанных в виде enum.
Если значение не соответствует ни одному варианту перечисления,
будет выброшено исключение ValueError.
Синтаксис
public function getEnum(string $key, string $class, mixed $default = null): ?\UnitEnum
Пример
Давайте создадим перечисление Status и извлечём его
значение из параметров запроса:
<?php
namespace App\Enum;
enum Status: string
{
case Active = 'active';
case Inactive = 'inactive';
case Pending = 'pending';
}
?>
Теперь получим значение параметра status в контроллере:
<?php
namespace App\Controller;
use App\Enum\Status;
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
{
$status = $request->query->getEnum('status', Status::class);
return new Response($status->value);
}
}
?>
Результат выполнения кода для адреса /article?status=active:
"active"
Пример
Давайте передадим значение по умолчанию, если параметр отсутствует в запросе:
<?php
namespace App\Controller;
use App\Enum\Status;
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
{
$status = $request->query->getEnum('status', Status::class, Status::Pending);
return new Response($status->value);
}
}
?>
Результат выполнения кода для адреса /article:
"pending"
Пример
Давайте получим enum из POST-параметров формы:
<?php
namespace App\Controller;
use App\Enum\Status;
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
{
$status = $request->request->getEnum('status', Status::class);
return new Response($status->value);
}
}
?>
Результат выполнения кода при отправке формы со значением
status=inactive:
"inactive"
Смотрите также
-
класс
InputBag,
который хранит параметры запроса -
метод
get,
который возвращает значение параметра запроса -
метод
getInt,
который возвращает целочисленное значение параметра -
метод
getBoolean,
который возвращает булево значение параметра