コード例 #1
0
 /**
  * Helper method. Retrieves all elements from fieldset the $element belongs to.
  *
  * @param ElementInterface $element
  * @param FieldsetInterface $fieldset
  * @return array|\Traversable
  */
 protected function getFieldsetElements(ElementInterface $element, FieldsetInterface $fieldset)
 {
     $elementName = $this->normalizeElementName($element->getName());
     if ($fieldset->has($elementName) && $fieldset->get($elementName) === $element) {
         return array_merge($fieldset->getElements(), $fieldset->getFieldsets());
     }
     if ($fieldset instanceof Element\Collection && (($elements = $this->getFieldsetElements($element, $fieldset->getTargetElement())) || ($template = $fieldset->getTemplateElement()) && ($elements = $this->getFieldsetElements($element, $template)))) {
         return $elements;
     }
     foreach ($fieldset->getFieldsets() as $fieldsetElement) {
         if ($elements = $this->getFieldsetElements($element, $fieldsetElement)) {
             return $elements;
         }
     }
     return [];
 }
コード例 #2
0
 /**
  * Prepare the validation group in case Collection elements were used (this function also handle the case where elements
  * could have been dynamically added or removed from a collection using JavaScript)
  *
  * @param FieldsetInterface $formOrFieldset
  * @param array             $data
  * @param array             $validationGroup
  */
 protected function prepareValidationGroup(FieldsetInterface $formOrFieldset, array $data, array &$validationGroup)
 {
     foreach ($validationGroup as $key => &$value) {
         if (!$formOrFieldset->has($key)) {
             continue;
         }
         $fieldset = $formOrFieldset->byName[$key];
         if ($fieldset instanceof Collection) {
             if (!isset($data[$key]) && $fieldset->getCount() == 0) {
                 unset($validationGroup[$key]);
                 continue;
             }
             $values = array();
             if (isset($data[$key])) {
                 foreach (array_keys($data[$key]) as $cKey) {
                     $values[$cKey] = $value;
                 }
             }
             $value = $values;
         } else {
             if (!isset($data[$key])) {
                 $data[$key] = array();
             }
             $this->prepareValidationGroup($fieldset, $data[$key], $validationGroup[$key]);
         }
     }
 }
コード例 #3
0
ファイル: Form.php プロジェクト: ninahuanca/zf2
 /**
  * Prepare the validation group in case Collection elements were used (this function also handle the case where elements
  * could have been dynamically added or removed from a collection using JavaScript)
  *
  * @param FieldsetInterface $formOrFieldset
  * @param array             $data
  * @param array             $validationGroup
  */
 protected function prepareValidationGroup(FieldsetInterface $formOrFieldset, array $data, array &$validationGroup)
 {
     foreach ($validationGroup as $key => &$value) {
         if (!$formOrFieldset->has($key)) {
             continue;
         }
         $fieldset = $formOrFieldset->byName[$key];
         if ($fieldset instanceof Collection) {
             if (!isset($data[$key])) {
                 unset($validationGroup[$key]);
                 continue;
             }
             $values = array();
             $count = count($data[$key]);
             for ($i = 0; $i != $count; ++$i) {
                 $values[] = $value;
             }
             $value = $values;
         } else {
             if (isset($data[$key])) {
                 $this->prepareValidationGroup($fieldset, $data[$key], $validationGroup[$key]);
             }
         }
     }
 }