symfony+;fosrest:如何验证路由参数

symfony+;fosrest:如何验证路由参数,symfony,fosrestbundle,Symfony,Fosrestbundle,例如,我有几个操作使用相同的route参数 /** * @Rest\Get("/api/ip/{ip}", name="app_ip_get") */ public function ipGetAction(DocumentManager $documentManager, $ip) 如何创建一个ip验证程序,并在任何地方使用它? С这只能用表单完成吗?如果我是你,我会创建一个名为IpAddress的地址: final class IpAddress { private $valu

例如,我有几个操作使用相同的route参数

/**
 * @Rest\Get("/api/ip/{ip}", name="app_ip_get")
 */
public function ipGetAction(DocumentManager $documentManager, $ip)
如何创建一个
ip验证程序
,并在任何地方使用它?
С这只能用表单完成吗?

如果我是你,我会创建一个名为
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)

在param转换器中,在创建地址时只捕获异常,如果捕获到异常,则重新调用将由框架处理的异常。拥抱正确的OOP,停止这种疯狂:)

谢谢!在空闲时间,我开始基于ObjectValue思想制作symfony包