Zend框架1中的URL验证

时间:2014-05-31 04:50:20

标签: php zend-framework zend-form

如何验证zend框架中的url字段。我尝试了以下代码。

 $website = $this->createElementText('website', 'Website');
 $website->setOptions(
            array(
                'filters' => array(
                    'StringTrim',
                    'StripTags',
                ),
                'validators' => array(
                    'NotEmpty',
                    array(
                        'Callback',
                        true,
                        array(
                            'callback' => function($value) {
                                //  if (!strpos($value, 'http'))   $value = 'http://' . $value;
                                return Zend_Uri::check($value);
                            }
                        ),
                        'messages' => array(
                            Zend_Validate_Callback::INVALID_VALUE => 'Please enter a valid URL',
                        ),
                    ),
                ),
            )
    )->setErrorMessages(array('Please enter a valid URL. For e.g, http://test.com or http://www.test.com'));
  $form->addElements(array($website));

但这不准确。例如,它不会像htt://www.google

这样的网址提供错误

如何改进我的验证。还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

就个人而言,我使用了一个custum验证器,它具有可以轻松重复使用的优点,而无需为每个字段重新编码。

网络上有很多例子,例如hereherehere(法语)......

编码Your_Validate_Uri课程后,你可以这样做:

$website->addValidator(new Your_Validate_Uri());

我希望它会对你有所帮助。 :)

答案 1 :(得分:1)

我使用这样的东西和我应该做的工作:

'validators'   => array(
                array(
                    'validator' => 'Callback',
                    'options' => array(
                        'callback' => function ($value) {

                            if (!filter_var($value, FILTER_VALIDATE_URL) === false) {
                                return true;
                            } else {
                                return false;
                            }
                        },
                        'messages' => 'This is not a valid url address'
                    ),
                    'breakChainOnFailure' => true
                ),
            ),

祝你好运;)