Zend Framework 2仅显示所需的自定义验证错误消息

时间:2016-11-03 00:07:19

标签: php zend-framework2

我有一个必填的ISBN字段,我想更改一般的错误消息。我已经设置了自定义错误消息并且它们可以正常工作。过滤器是模型getInputFilterSpecification()的{​​{1}}函数的一部分,它可以正确验证和显示自定义错误消息:

fieldSet

但是当该字段留空时。 “ISBN无效”和“需要ISBN”信息均会显示。

如果该字段留空,是否只能显示所需的错误消息?

类似以下内容:

use Zend\Form\Element;
use Zend\Form\Fieldset;
use Zend\Validator;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;

class BookItemFieldset extends Fieldset implements InputFilterProviderInterface
{
    public $Types;

    public function __construct($itemName, $Types)
    {

        parent::__construct($itemName, $Types);

        $this->Types = $Types;

        // .. Other fields

        $bookISBN = new Element\Number('bookISBN');
        $bookISBN->setLabel('Book ISBN ')
            ->setAttribute('id', 'bookISBN');

        // .. more fields

        $this->add($bookISBN);
    }

    public function getInputFilterSpecification()
    {
        return array(

            'bookISBN' => array(
                'required' => true,
              'validators' => array(
                  new Validator\NotEmpty(array(
                          'setMessage'=> 'ISBN is Required'
                      )
                  ),
                  new Validator\Isbn(array(
                      'setMessage'=> 'ISBN is Invalid'
                  )),

              )
            ),
           //... more input filters

        );

    }
}

感谢。

1 个答案:

答案 0 :(得分:1)

您需要通过将链设置为true来断开链,默认情况下,Zend将其设置为false。您可以试试看下面的代码是否有效。

public function getInputFilterSpecification()
    {
        return array(

            'bookISBN' => array(
                'required' => true,
              'validators' => array(
                  array(
                     'name' => 'not_empty',
                     'break_chain_on_failure' => true,
                     'options' => array(
                         'messages' => array(
                              \Zend\Validator\NotEmpty::IS_EMPTY => 'ISBN is required',
                         ),
                     ),
                  ),
                  new Validator\Isbn(array(
                      'setMessage'=> 'ISBN is Invalid'
                  )),

              )
            ),
           //... more input filters

        );

    }

或者可能是' NotEmpty'。我无法测试它。

public function getInputFilterSpecification()
    {
        return array(

            'bookISBN' => array(
                'required' => true,
              'validators' => array(
                  array(
                     'name' => 'NotEmpty',
                     'break_chain_on_failure' => true,
                  ),
                  new Validator\Isbn(array(
                      'setMessage'=> 'ISBN is Invalid'
                  )),

              )
            ),
           //... more input filters

        );

    }