ZF2:如何使用和不使用http://或https://使Zend\Validator\Hostname接受url字符串

cit*_*404 2 php zend-framework2

我使用Zend\Validator\Hostname来验证包含url的输入字符串.问题是它只接受mydomain.com类型的URL,而不接受http://或https://协议前缀.实现理想行为的最佳方法是什么?

$inputFilter->add($factory->createInput(array(
                'name'     => 'shop_link',
                'required' => false,
                'filters'  => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                ),
                'validators' => array(
                        array(
                            'name'    => 'StringLength',
                            'options' => array(
                                'encoding' => 'UTF-8',
                                'min'      => 1,
                                'max'      => 100,
                            ),
                        ),
                        array(
                            'name'    => 'Hostname',
                            'options' => array(
                                'allow'       => \Zend\Validator\Hostname::ALLOW_DNS, // Allow these hostnames
                                'useIdnCheck' => true,  // Check IDN domains
                                'useTldCheck' => true,  // Check TLD elements
                                'ipValidator' => null,  // IP validator to use
                            ),
                        ),
                ),
        )));
Run Code Online (Sandbox Code Playgroud)

谢谢

yan*_*not 5

我没有50个评论Sam的答案的声誉,但Hostname :: ALLOW_URI不起作用.并且在一年前没有工作 - /sf/answers/973152631/.如果你看一下源代码,就不应该工作.奇怪的是,它有两个upvotes.

$validator = new \Zend\Validator\Hostname();
$validator->setAllow($validator::ALLOW_DNS | $validator::ALLOW_URI);
var_dump($validator->isValid('http://domain.com')); // false!
Run Code Online (Sandbox Code Playgroud)