Для Symfony Validator Component возможно ли принудительное завершение проверки из класса, который реализует EventSubscriberInterface

У меня есть следующий код;

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
$builder->create(
'href',
'url',
$this->getOptionsForUrlWidget('Website URL')
)->addEventSubscriber(new GetResolvedUrlListener())
)
...

Мой метод GetResolvedUrlListener выполняет запрос curl для определения правильного протокола и конечного адреса (после перенаправления), чтобы определить правильный URL.

Мне бы хотелось, чтобы проверка завершилась неудачно, если запрос curl не получил успешный ответ HTTP. Поэтому, если указанный URL-адрес недоступен, его не следует сохранять.

Можно ли это сделать в классе, который реализует EventSubscriberInterface? Должен ли я добавить новое ограничение и дважды проверить указанный URL?

1

Решение

Вы должны добавить ограничение, но вам не обязательно проверять его дважды, вы можете создать центральную службу, которая разрешает эти URL, но также сохраняет их для себя в двух $validUrls а также $invalidUrls свойства, вы можете использовать этот сервис в и ваш слушатель событий и в вашем ограничении проверки, сервис может выглядеть примерно так:

class UrlValidator{

protected $validUrls = array();
protected $invalidUrls = array();

public function resolve($url){
// we have validated this url before, and it wasn't valid
if(isset($this->invalidUrls[$url])
return false;
// we have validated this url before, so we can return true or the resolved value
if(isset($this->validUrls[$url])
return $this->validUrls[$url];

else{
// do the curl request, and set $this->validUrls[$urls] or $this->invalidUrls[$url] accordingly
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]