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

symfony + fosrest: how to validate route param

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

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

我怎样才能创建一个 ip validator 并在任何地方使用它? 是否只能通过表格来完成?

如果我是你,我会创建一个名为 IpAddressValue Object:

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

并创建自定义 param converter,它将根据请求加载此值对象:

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

在参数转换器中,只需在创建地址时捕获异常,如果捕获到异常,则重新抛出 BadRequestHttpException which will get handled by the framework. Embrace proper OOP and stop this primitive obsession 疯狂 :)