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

时间:2018-03-13 11:54:46

标签: symfony fosrestbundle

我有几个具有相同路由参数的操作,例如

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

如何创建一个ip validator并在任何地方使用它? 这只能用表格来完成吗?

1 个答案:

答案 0 :(得分:1)

如果我是你,我会创建一个名为IpAddress的{​​{3}}:

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();
    }
}

并创建自定义Value Object,根据请求加载此值对象:

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

在param转换器中,只需在创建地址时捕获异常,如果捕获了一个异常,请重新抛出将由框架处理的param converter。拥抱适当的OOP并停止这个BadRequestHttpException maddness:)