2015-12-08 2 views
0

Можно ли прикрепить сообщения об ошибках самому Fieldset, а не дочернему элементу в ZF2? У меня есть форма с двумя Fieldsets, и мне нужно, чтобы элементы, заполненные Fieldset1, также заполнялись в Fieldset2. (В каждом наборе полей есть дополнительные элементы, но если заполнено Fieldset1->element1, необходимо заполнить Fieldset2->element1).Проверка коллекции ZF2

У меня проверка правильности работы, но я получаю пустой массив, когда звоню $form->getMessages().

Сообщения не устанавливаются внутри Zend\Form\Fieldset::setMessages , поскольку он пытается найти элемент с помощью клавиши сообщения об ошибке. (В моем примере ниже 'invalidDate').

Я пытаюсь добавить сообщение об ошибке самому Fieldset, потому что ошибка не ограничивается одним конкретным полем, а коллекцией в целом.

//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" 
     ] 
    } 
} 

Update

Это проверка для start полей. Работа валидации, я могу сравнить поля start и end с параметром context. start и end содержат такие элементы, как год, месяц, неделя, день и т.д.

return array(
    "name" => "start", 
    "required" => true, 
    "validators" => array(
     array(
      "name" => "Application\Validator\Start" 
     ) 
    ) 
); 

ответ

0

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

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

Спасибо за ответ начала и окончания Fieldsets, а не элементы я проверка сделал, но сообщения не возвращаются при вызове GetMessages().. потому что Start и End не являются фактическими элементами. – Josh

+0

Вы можете использовать вложенный 'InputFilter' для фильтрации d проверки полей ... – Wilt

+0

@Josh Я обновил свой ответ. Я думаю, это то, что вы ищете ... – Wilt

Смежные вопросы