У меня есть несколько действий с одним и тем же параметром маршрута, например
/**
* @Rest\Get("/api/ip/{ip}", name = "app_ip_get")
*/
public function ipGetAction(DocumentManager $documentManager, $ip)
Как я могу создать один ip validator и использовать его везде?
Можно ли это сделать только с формами?




На вашем месте я бы создал Объект значения под названием 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)
В преобразователе параметров просто перехватите исключение при создании адреса, и если оно будет обнаружено, повторно выбросите BadRequestHttpException, который будет обрабатываться фреймворком. Примите правильное ООП и остановите это безумие примитивная одержимость :)
Спасибо! В свободное время я начал делать пакет symfony на основе идеологии ObjectValue github.com/TheHett/SymfonyValueObjectsBundle