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
并在任何地方使用它?
是否只能通过表格来完成?
如果我是你,我会创建一个名为 IpAddress
的 Value 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 疯狂 :)
我有几个具有相同路由参数的操作,例如
/**
* @Rest\Get("/api/ip/{ip}", name="app_ip_get")
*/
public function ipGetAction(DocumentManager $documentManager, $ip)
我怎样才能创建一个 ip validator
并在任何地方使用它?
是否只能通过表格来完成?
如果我是你,我会创建一个名为 IpAddress
的 Value 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 疯狂 :)