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

1

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

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?

Теги:
validation
symfony-forms
symfony-components

1 ответ

0
Лучший ответ

Вы должны добавить ограничение, но вам необязательно проверять его дважды, вы можете создать центральную службу, которая разрешает эти 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
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню