4

我想在下面的回调验证器中添加一条自定义错误消息(例如“需要邮政编码”),我将如何执行此操作?

   $zip = new \Zend\InputFilter\Input('zip');
        $zip->setRequired(false);
        $zip->getValidatorChain()
        ->attach(new \Zend\Validator\Callback(function ($value, $context) {
            if($context['location_type_id'] == \Application\Model\ProjectModel::$LOCATION_TYPE_ID_AT_AN_ADDRESS)
            {
                return (isset($value)&&($value!= NULL))? $value: false;
            }
            return true;
        }));

如果您需要更多信息,请告诉我,我会更新。谢谢你的帮助!

堕胎

4

3 回答 3

10

只需投入我的两分钱,还可以通过配置设置自定义消息。在使用工厂类型方法时,我经常使用它,如下所示:

'name' => array(
    ...
    'validators' => array(
        new \Zend\Validator\Callback(
            array(
                'messages' => array(\Zend\Validator\Callback::INVALID_VALUE => '%value% can only be Foo'),
                'callback' => function($value){
                    return $value == 'Foo';
                }))
    )
),

这会产生类似“Bar 只能是 Foo”的消息。

仔细看\Zend\Validator\Callback::INVALID_VALUE关键,这是在\Zend\Validator\Callback 中定义的一个常量:

const INVALID_VALUE = 'callbackValue';

在该类中用于设置验证器使用的消息:

protected $messageTemplates = array(
    self::INVALID_VALUE    => "The input is not valid",
    self::INVALID_CALLBACK => "An exception has been raised within the callback",
);

这意味着您可以安全地使用\Zend\Validator\Callback::INVALID_VALUE => 'Custom message'

我不确定这是否违反了编码原则,如果确实如此,请有人纠正我。

于 2013-11-13T19:55:15.497 回答
6

你可以这样做:

$callback = new \Zend\Validator\Callback(function ($value) {
        // Your validation logic
    }
);
$callback->setMessage('Zip Code is required');

$zip = new \Zend\InputFilter\Input('zip');
$zip->setRequired(false);
$zip->getValidatorChain()->attach($callback);
于 2013-09-03T13:06:29.267 回答
0

感谢 jchampion 的帮助。

        $zip = new \Zend\InputFilter\Input('zip');
        $zip->setRequired(false);            
        $callback = new \Zend\Validator\Callback(function ($value, $context) {
            if($context['location_type_id'] == \Application\Model\ProjectModel::$LOCATION_TYPE_ID_AT_AN_ADDRESS)
            {
                return (isset($value)&&($value!= NULL))? true: false;
            }
            return true;
        });
        $callback->setMessage('Zip Code is required');
        $zip->getValidatorChain()->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL));
        $zip->getValidatorChain()->attach($callback);
于 2013-09-03T13:43:24.170 回答