Example #1
0
 /**
  * @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;
 }