/** * @param object $object * @param string $fieldName * @param BaseControl $control * @param IClassMetadata $classMetadata * @throws \NForms\Exceptions\UnexpectedTypeException * @return bool */ public function load($object, $fieldName, BaseControl $control, IClassMetadata $classMetadata) { if ($classMetadata->hasAssociation($fieldName)) { if (($value = $classMetadata->getAssociationValue($object, $fieldName)) !== NULL) { if ($classMetadata->isSingleValuedAssociation($fieldName)) { if (!is_object($value)) { throw new UnexpectedTypeException("In mapping association {$classMetadata->getClass()}::\${$fieldName} - form expected object, given " . gettype($value) . "."); } $relatedMetadata = $classMetadata->getRelatedMetadata($fieldName); if (!is_a($value, $relatedMetadata->getClass())) { throw new UnexpectedTypeException("In mapping association {$classMetadata->getClass()}::\${$fieldName} - form expected NULL or '{$relatedMetadata->getClass()}' instance, given " . get_class($value) . "."); } $value = $relatedMetadata->getId($value); } else { if (!is_array($value) && (!$value instanceof \ArrayAccess || !$value instanceof \Iterator)) { throw new UnexpectedTypeException("In mapping association {$classMetadata->getClass()}::\${$fieldName} - form expected array or ArrayAccess and Iterator instance, given " . get_class($value) . "."); } $relatedMetadata = $classMetadata->getRelatedMetadata($fieldName); $value = array_map(function ($object) use($classMetadata, $fieldName, $relatedMetadata) { if (!is_a($object, $relatedMetadata->getClass())) { throw new UnexpectedTypeException("In mapping association {$classMetadata->getClass()}::\${$fieldName} - form expected '{$relatedMetadata->getClass()}' instance in collection, given " . get_class($object) . "."); } return $relatedMetadata->getId($object); }, $value); } } } else { $value = $classMetadata->getFieldValue($object, $fieldName); } $control->setValue($value); return TRUE; }