Symfony + fosrest: как проверить параметр маршрута

У меня есть несколько действий с одним и тем же параметром маршрута, например

/**
 * @Rest\Get("/api/ip/{ip}", name = "app_ip_get")
 */
public function ipGetAction(DocumentManager $documentManager, $ip)

Как я могу создать один ip validator и использовать его везде? Можно ли это сделать только с формами?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На вашем месте я бы создал Объект значения под названием IpAddress:

final class IpAddress
{
    private $value;

    public function __construct($value)
    {
        if (inet_pton($value) === false) {
            throw new \LogicException('Invalid IPv4/6 address');
        }

        $this->value = (string)$value;
    }

    public function getAddress(): string
    {
        return $this->value;
    }

    public function __toString(): string
    {
        return $this->getAddress();
    }
}

и создайте собственный конвертер параметров, который будет загружать этот объект значения на основе запроса:

/**
 * @Rest\Get("/api/ip/{ip}", name = "app_ip_get")
 */
public function ipGetAction(DocumentManager $documentManager, IpAddress $ip)

В преобразователе параметров просто перехватите исключение при создании адреса, и если оно будет обнаружено, повторно выбросите BadRequestHttpException, который будет обрабатываться фреймворком. Примите правильное ООП и остановите это безумие примитивная одержимость :)

Спасибо! В свободное время я начал делать пакет symfony на основе идеологии ObjectValue github.com/TheHett/SymfonyValueObjectsBundle

Hett 20.04.2018 16:32

Другие вопросы по теме