/**
* @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;
}