zend \ form \ element \ select с несколькими атрибутами: как переопределить ошибку проверки notEmpty по умолчанию?

мой Zend\Form включает в себя Zend\Form\Element\Select с атрибутом 'multiple' => 'multiple' и NotEmpty валидатор с кастомом isEmpty сообщение об ошибке.
С установленным множественным атрибутом, когда я отправляю форму без выбора параметров, я получаю значение по умолчанию «Требуется значение…» сообщение об ошибке, а не мое собственное.
Когда я удаляю multiple атрибут, я получаю желаемое поведение, то есть мое пользовательское сообщение об ошибке.

Итак, что я делаю не так?

Вот быстрый и грязный тест, со всем, что вставлено в действие моего контроллера ради демонстрации:

public function testAction() {

$form = new \Zend\Form\Form;
$factory = new \Zend\InputFilter\Factory;
$form->add(
[
'name' => 'select',
'type' => 'Zend\Form\Element\Select',
'attributes' => [
'multiple' => 'multiple',
],
'options' =>[
'value_options' => ['' => '', 1 => "one", 2 => "two", 3 => "three"],
]
]

);
$filter = $factory->createInputFilter([
'select' => [
'name' => 'select',
'required' => true,
'filters' => [
['name' => 'StringTrim',],
],
'validators' => [[
'name' => 'NotEmpty',
'options' => ['messages' => ['isEmpty'=> 'all Dharmas are forms of Emptiness']],
]],
]
]);
$form->setInputFilter($filter);
$form->add(['name'=> 'submit','type'=> 'submit', 'attributes'=> ['value'=> 'submit']]);
$form->setAttribute('action','/my-project/index/test')
$view = new ViewModel();
$view->setTemplate('my-project/index/test')
->setVariables(['form' => $form]);
if ($this->getRequest()->isPost()) {
$data = $this->params()->fromPost();
$form->setData($data);
print_r($data); // just making sure, for sanity's sake
if ($form->isValid()) {
echo "valid!";
} else {
echo "validation failed.";
}
}
return $view;
}

Просто для записи, вот мнение, хотя я знаю (из дампа сообщений об ошибках), что проблема не здесь:

<?php
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form);
echo $this->form()->closeTag();

Спасибо!

0

Решение

Это, вероятно, связано с тем, что установка multiple поле вызовет Select класс для изменения валидатора.

Ты это видишь здесь на линии 227 в getValidator метод Zend\Form\Element\Select учебный класс.

$validator = new ExplodeValidator([
'validator'      => $validator,
'valueDelimiter' => null, // skip explode if only one value
]);

ExplodeValidator проверит каждое значение независимо с валидатором, который вы предоставили, и это, вероятно, приводит к неожиданному «Требуется значение…» сообщение об ошибке. Скорее всего, валидатор в конечном итоге по линии 186 установка $values как массив, содержащий пустую строку.

Я думаю, что если вы хотите получить ваше собственное сообщение, чтобы установить required => false а также 'allow_empty' => false для вашего валидатора. В вашем случае я думаю, что это не должно быть проблемой …

0

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

Других решений пока нет …

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