/** * {@inheritDoc} */ public function prepareObject(TypeInterface $type, $parent = null) { $object = parent::prepareObject($type); if (null == $parent) { throw new RuntimeException('You need a parent to create new objects'); } /** @var $meta \Doctrine\ODM\PHPCR\Mapping\ClassMetadata */ $meta = $this->om->getClassMetaData(get_class($object)); if (!property_exists($object, $meta->parentMapping)) { throw new RuntimeException('parentMapping need to be mapped to ' . get_class($object)); } $meta->setFieldValue($object, $meta->parentMapping, $parent); return $object; }
/** * {@inheritDoc} * * In addition to create the object, try to find the parent relation if one exists. */ public function prepareObject(TypeInterface $type, $parent = null) { $object = parent::prepareObject($type); $config = $type->getConfig(); $needParent = isset($config['parent_required']) && (bool) $config['parent_required']; if (null == $parent) { if ($needParent) { throw new RuntimeException(sprintf('Parent is required for object of type %s', get_class($object))); } return $object; } /** @var ClassMetadata $metaData */ $metaData = $this->om->getClassMetaData(get_class($object)); $parentMappingField = $this->findParentMapping($parent, $metaData); if (false === $parentMappingField) { if ($needParent) { throw new RuntimeException(sprintf('No mapping for parent class %s found in metadata of %s', ClassUtils::getClass($parent), $metaData->getName())); } return $object; } $metaData->setFieldValue($object, $parentMappingField, $parent); return $object; }