【问题标题】:Adding custom message to Zend Framework 2 Callback Validator向 Zend Framework 2 回调验证器添加自定义消息
【发布时间】:2013-09-03 09:20:56
【问题描述】:

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

   $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;
        }));

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

流产

【问题讨论】:

    标签: validation callback zend-framework2 message


    【解决方案1】:

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

    '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 can only be 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'

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

    【讨论】:

      【解决方案2】:

      你可以这样做:

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

      【讨论】:

      • 完美的jchampion,我会用最终的解决方案更新问题。
      【解决方案3】:

      感谢 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-07
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多