Мой 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();
Спасибо!
setAttribute
, который вызывал 500), и я вижу правильное сообщение об ошибке... - person marcosh   schedule 14.01.2016