/** * Overwrite to set the node name if not set * * @param EntityInterface $entity * @throws \RuntimeException * @return bool|void */ public function store(EntityInterface $entity) { /** @var $meta \Doctrine\ODM\PHPCR\Mapping\ClassMetadata */ $meta = $this->om->getClassMetaData(get_class($entity->getObject())); if (!property_exists($entity->getObject(), $meta->nodename)) { throw new RuntimeException('nodename need to be mapped to ' . get_class($entity->getObject())); } $nodename = $meta->getFieldValue($entity->getObject(), $meta->nodename); if (empty($nodename)) { //in case of node creation the nodename is empty $name = $this->generateNodeName($entity); //set a guessed nodename $meta->setFieldValue($entity->getObject(), $meta->nodename, $name); } try { return parent::store($entity); } catch (ItemExistsException $iee) { //an item with the same title already exists return false; } }
/** * {@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; }