我有几个具有相同路由参数的操作,例如
/**
* @Rest\Get("/api/ip/{ip}", name="app_ip_get")
*/
public function ipGetAction(DocumentManager $documentManager, $ip)
如何创建一个ip validator
并在任何地方使用它?
这只能用表格来完成吗?
答案 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:)