Можно ли прикреплять сообщения об ошибках к самому Fieldset, а не к дочернему элементу в ZF2? У меня есть форма с двумя наборами полей, и мне нужно убедиться, что элементы, заполненные в Fieldset1, также заполнены в Fieldset2. (Есть дополнительные элементы внутри каждого набора полей, но если Fieldset1->element1
заполнен, Fieldset2->element1
должен быть заполнен).
У меня проверка работает правильно, но я получаю пустой массив при вызове $form->getMessages()
,
Сообщения не устанавливаются внутри Zend\Form\Fieldset::setMessages
потому что он пытается найти элемент по ключу сообщения об ошибке. (В моем примере ниже 'invalidDate'
).
Я пытаюсь добавить сообщение об ошибке в сам набор полей, потому что ошибка не ограничивается одним конкретным полем, а всей коллекцией.
//Regular Error
{
start: {
year: [
regexInvalid: "SomeMessage"]
},
end: {
year: [
regexInvalid: "SomeMessage"]
}
}
//Fieldset level Error
{
start: {
invalidDate: [
noMatch: "Filled in values of 'start' and 'end' must match"]
},
end: {
invalidDate: [
noMatch: "Filled in values of 'start' and 'end' must match"]
}
}
Обновить
Это проверка для start
FIELDSET. Проверка работает, я могу сравнить start
а также end
наборы полей с контекстным параметром. start
а также end
содержат такие элементы, как год, месяц, неделя, день и т. д.
return array(
"name" => "start",
"required" => true,
"validators" => array(
array(
"name" => "Application\Validator\Start")
)
);
Вы можете решить такие наборы полей, создав вложенные входные фильтры (конфигурацию входного фильтра для каждого набора полей. Я показал один валидатор на год в конфигурации, чтобы показать вам, как это может работать:
array(
'start' => array(
'day' => array(
'name' => 'end',
'required' => false
),
'week' => array(
'name' => 'end',
'required' => false
),
'month' => array(
'name' => 'end',
'required' => false
),
'year' => array(
'name' => 'end',
'required' => false
),
// type key necessary for nested input filter
'type' => 'Zend\InputFilter\InputFilter'
),
'end' => array(
'day' => array(
'name' => 'end',
'required' => false
),
'week' => array(
'name' => 'end',
'required' => false
),
'month' => array(
'name' => 'end',
'required' => false
),
'year' => array(
'name' => 'end',
'required' => false,
'filters' => array(),
'validators' => array(
array(
'name' => 'Callback',
'options' => array(
'messages' => array(
Callback::INVALID_VALUE => "Filled in values of start year and end year must match",
),
'callback' => function($value, $context = array()) {
// value of end
$endYear = $value;
// value of start year
$startYear = $context['start']['year'];
// validate
return $endYear >= $startYear;
}
)
)
)
),
// type key necessary for nested input filter
'type' => 'Zend\InputFilter\InputFilter'
)
)
Других решений пока нет …