Neos.Neos/Classes/Service/NodeOperations.php
public function create(NodeInterface $referenceNode, array $nodeData, $position)
    {
        if (!in_array($position, ['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;
    }
public function create(NodeInterface $referenceNode, array $nodeData, $position)
    {
        if (!in_array($position, ['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;
    }
public function create ( NodeInterface $ referenceNode , array $ nodeData , $ position ) { if ( ! in_array ( $ position , [ '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 ; }
Helper method for creating a new node.

@param NodeInterface $referenceNode
@param array $nodeData
@param string $position
@return NodeInterface
@throws \InvalidArgumentException
Helper method for creating a new node .