Neos\Neos\Service\NodeOperations::create PHP Method

create() public method

Helper method for creating a new node.
public create ( Neos\ContentRepository\Domain\Model\NodeInterface $referenceNode, array $nodeData, string $position ) : Neos\ContentRepository\Domain\Model\NodeInterface
$referenceNode Neos\ContentRepository\Domain\Model\NodeInterface
$nodeData array
$position string
return Neos\ContentRepository\Domain\Model\NodeInterface
    public function create(NodeInterface $referenceNode, array $nodeData, $position)
    {
        if (!in_array($position, array('before', 'into', 'after'), true)) {
            throw new \InvalidArgumentException('The position should be one of the following: "before", "into", "after".', 1347133640);
        }
        $nodeType = $this->nodeTypeManager->getNodeType($nodeData['nodeType']);
        if ($nodeType->isOfType('Neos.Neos:Document') && !isset($nodeData['properties']['uriPathSegment']) && isset($nodeData['properties']['title'])) {
            $nodeData['properties']['uriPathSegment'] = $this->nodeUriPathSegmentGenerator->generateUriPathSegment($referenceNode, $nodeData['properties']['title']);
        }
        $proposedNodeName = isset($nodeData['nodeName']) ? $nodeData['nodeName'] : null;
        $nodeData['nodeName'] = $this->nodeService->generateUniqueNodeName($this->getDesignatedParentNode($referenceNode, $position)->getPath(), $proposedNodeName);
        if ($position === 'into') {
            $newNode = $referenceNode->createNode($nodeData['nodeName'], $nodeType);
        } else {
            $parentNode = $referenceNode->getParent();
            $newNode = $parentNode->createNode($nodeData['nodeName'], $nodeType);
            if ($position === 'before') {
                $newNode->moveBefore($referenceNode);
            } else {
                $newNode->moveAfter($referenceNode);
            }
        }
        if (isset($nodeData['properties']) && is_array($nodeData['properties'])) {
            foreach ($nodeData['properties'] as $propertyName => $propertyValue) {
                $newNode->setProperty($propertyName, $propertyValue);
            }
        }
        return $newNode;
    }

Usage Example

Example #1
0
 /**
  * Creates a new node and returns tree structure
  *
  * @param Node $referenceNode
  * @param array $nodeData
  * @param string $position where the node should be added, -1 is before, 0 is in, 1 is after
  * @param string $nodeTypeFilter
  * @return void
  */
 public function createNodeForTheTreeAction(Node $referenceNode, array $nodeData, $position, $nodeTypeFilter = '')
 {
     $newNode = $this->nodeOperations->create($referenceNode, $nodeData, $position);
     $this->view->assignNodeAndChildNodes($newNode, $nodeTypeFilter);
 }