2013-01-03 3 views
2

Мне нужна проверка подлинности URL внутри формы. Сейчас я использую:Zend Framework Hostname validator

$url = new Zend_Form_Element_Text('url'); 
$url->addValidator(new Zend_Validate_Hostname()); 

Код выше будет проверять URL-адреса, как: www.domain.com но потерпит неудачу проверки для http://www.domain.com.

Какой валидатор следует использовать для проверки как с URL-адреса протокола, так и без него.

+0

Вам нужно проверить оба? или просто доменное имя важно? – Vadyus

+0

Мне нужно, чтобы оба URL-адреса передали процесс проверки. –

ответ

0

Вы не можете сделать это с Zend_Validate_Hostname. Как вы могли бы это сделать, нужно написать собственный валидатор, который разделит sting на 2 части - и проверит их с помощью Zend_Validate_Hostname для имени хоста и Zend_Validate_InArray для протокола

0

Это будет проверять как домен Ури:

$form->addElement ('text', 'url',array(
      'validators' => array (
        array(
         'Callback', 
         true, 
         ['callback' => function($value) { 
          if (Zend_Uri::check($value)) { 
           $hostnameValidator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS); //do not allow local hostnames, this is the default 
           $uriHttp = Zend_Uri_Http::fromString($value); 
           return $hostnameValidator->isValid($uriHttp->getHost()); 
          } 
          return false; 
         }], 
         'messages' => [Zend_Validate_Callback::INVALID_VALUE => 'Please enter a valid URL'] 
        ) 
       ) 
      ));
Смежные вопросы