Установить сообщение об ошибке валидатора NotEmpty

Я пытаюсь установить пользовательское сообщение об ошибке с формой ZF2 и валидацией NotEmpty.

В моей форме у меня есть следующий радиоэлемент.

$this->add(array(
'name' => 'paymentMethod',
'type' => 'Radio',
'options' => array(
'label' => _('Payment Methods:'),
'value_options' => $paymentMethods,
'disable_inarray_validator' => TRUE,
),
));

и в моем входном фильтре у меня есть

$inputFilter->add(array(
'name' => 'paymentMethod',
'required' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => _("You must select the payment method"),
),
),
),
array(
'name' => 'InArray',
'options' => array(
'haystacK' => $this->getPaymentMethods(),
'messages' => array(
InArray::NOT_IN_ARRAY => _("This payment method does not exist"),
),
),
),
),
));

Как видно из моего входного фильтра, я установил пользовательское сообщение для моего валидатора NotEmpty. Проблема, с которой я сталкиваюсь, заключается в том, что форма выводит сообщение об ошибке по умолчанию «Значение является обязательным и не может быть пустым», а не мое пользовательское.

Я предполагаю, что это как-то связано с тем, что ‘required’ => TRUE автоматически устанавливает валидатор NotEmpty, но я не знаю, как это отключить.

У меня есть другие текстовые элементы с этим валидатором, и они нормально отображают пользовательское сообщение об ошибке, этого радиоэлемента просто нет. У меня также есть элемент multicheckbox, который имеет ту же проблему.

Кто-нибудь знает, почему это происходит?

Спасибо заранее.

РЕДАКТИРОВАТЬ

У меня сейчас такая же проблема с другим элементом, в данном случае его DoctrineModule \ Form \ Element \ ObjectMultiCheckbox.

Элемент определен

$this->add(array(
'name' => 'categories',
'type' => 'Admin\DoctrineModule\Form\Element\ObjectMultiCheckbox',
'options' => array(
'label' => _('Categories:'),
'label_attributes' => array('class' => 'required'),
'object_manager' => $this->getEntityManager(),
'target_class' => 'Application\Entity\Categories',
'property' => 'category',
'is_method' => true,
'find_method' => array(
'name' => 'FindAll',
),
'disable_inarray_validator' => TRUE,
),
));

и в моем методе getInputFilterSpecification () у меня есть

...
'categories' =>
array(
'required' => TRUE,
'allow_empty' => TRUE,
'continue_if_empty' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => _("You must select the items categories"),
),
),
),
array(
'name' => 'Freedom\Zend\Validator\Doctrine\Db\DoctrineRecordExists',
'options' => array(
'entityManager' => $this->getEntityManager(),
'entity' => 'Application\Entity\Categories',
'identifier' => 'catagoryId',
'messages' => array(
DoctrineRecordExists::ERROR_NO_RECORD_FOUND => _("This category does not exist"),
),
),
),
),
)
...

Как вы можете видеть, я попробовал 'allow_empty' а также 'continue_if_empty' варианты но без везения. Я также пытался 'required' => FALSE, но элемент просто проходит проверку.

Сообщение по умолчанию показывает, когда проверка NotEmpty завершается неудачно.

0

Решение

Изменить ваш входной фильтр изменить 'required' => TRUEвариант 'required' => false

$inputFilter->add(array(
'name' => 'paymentMethod',
'required' => false,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'break_chain_on_failure' => true,
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => _("You must select the payment method"),
),
),
),
array(
'name' => 'InArray',
'options' => array(
'haystacK' => $this->getPaymentMethods(),
'messages' => array(
InArray::NOT_IN_ARRAY => _("This payment method does not exist"),
),
),
),
),
));
0

Другие решения

Я сделал некоторые изменения в вашем коде, но я не тестировал. Попробуйте и дайте мне знать, если это сработало. Удачи

$inputFilter->add(array(
'name' => 'paymentMethod',
'required' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => "You must select the payment method",
),
),
'break_chain_on_failure' => true
),
array(
'name' => 'InArray',
'options' => array(
'haystacK' => $this->getPaymentMethods(),
'messages' => array(
InArray::NOT_IN_ARRAY => _("This payment method does not exist"),
),
),
),
),

));

0

Я нашел решение своей проблемы.
я изменил 'required' => TRUE, возможность 'allow_empty' => TRUE, и теперь мое сообщение об ошибке отображается правильно.

$inputFilter->add(array(
'name' => 'paymentMethod',
'allow_empty' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => _("You must select the payment method"),
),
),
'break_chain_on_failure' => true,
),
array(
'name' => 'InArray',
'options' => array(
'haystacK' => $this->getPaymentMethods(),
'messages' => array(
InArray::NOT_IN_ARRAY => _("This payment method does not exist"),
),
),
),
),
));

Я предполагаю, что не установка обязательной опции в true останавливает автоматическое создание валидатора NotEmpty.

0
По вопросам рекламы [email protected]