Zend Framework主机名验证器

时间:2013-01-03 14:17:42

标签: php zend-framework

我需要在表单中使用URL验证器。现在我正在使用:

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

上面的代码将验证网址如:www.domain.com,但http://www.domain.com的验证失败。

我应使用哪种验证器来验证协议URL的使用和不协议URL。

3 个答案:

答案 0 :(得分:1)

这将验证域和uri:

$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']
                    )
                )
            ));

答案 1 :(得分:0)

您无法使用Zend_Validate_Hostname执行此操作。您可以这样做的方法是编写自己的验证器,将sting分成两部分 - 并使用Zend_Validate_Hostname作为主机名并使用Zend_Validate_InArray验证协议

答案 2 :(得分:0)