Проверка коллекции ZF2

Можно ли прикреплять сообщения об ошибках к самому 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")
)
);

0

Решение

Вы можете решить такие наборы полей, создав вложенные входные фильтры (конфигурацию входного фильтра для каждого набора полей. Я показал один валидатор на год в конфигурации, чтобы показать вам, как это может работать:

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'
)
)
0

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

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

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