Neos\ContentRepository\Domain\Model\NodeData::similarize PHP Метод

similarize() публичный Метод

Make the node "similar" to the given source node. That means, - all properties - index - node type - content object will be set to the same values as in the source node.
public similarize ( AbstractNodeData $sourceNode, boolean $isCopy = false ) : void
$sourceNode AbstractNodeData
$isCopy boolean
Результат void
    public function similarize(AbstractNodeData $sourceNode, $isCopy = false)
    {
        $this->properties = [];
        foreach ($sourceNode->getProperties() as $propertyName => $propertyValue) {
            $this->setProperty($propertyName, $propertyValue);
        }
        $propertyNames = ['nodeType', 'hidden', 'hiddenAfterDateTime', 'hiddenBeforeDateTime', 'hiddenInIndex', 'accessRoles'];
        if (!$isCopy) {
            $propertyNames[] = 'creationDateTime';
            $propertyNames[] = 'lastModificationDateTime';
        }
        if ($sourceNode instanceof NodeData) {
            $propertyNames[] = 'index';
        }
        foreach ($propertyNames as $propertyName) {
            ObjectAccess::setProperty($this, $propertyName, ObjectAccess::getProperty($sourceNode, $propertyName));
        }
        $contentObject = $sourceNode->getContentObject();
        if ($contentObject !== null) {
            $this->setContentObject($contentObject);
        }
    }

Usage Example

 /**
  * @test
  */
 public function similarizeClearsPropertiesBeforeAddingNewOnes()
 {
     /** @var $sourceNode NodeData */
     $sourceNode = $this->getAccessibleMock(NodeData::class, array('addOrUpdate'), array('/foo/bar', $this->mockWorkspace));
     $this->inject($sourceNode, 'nodeTypeManager', $this->mockNodeTypeManager);
     $sourceNode->_set('nodeDataRepository', $this->createMock(RepositoryInterface::class));
     $this->nodeData->setProperty('someProperty', 'somePropertyValue');
     $this->nodeData->setProperty('someOtherProperty', 'someOtherPropertyValue');
     $sourceNode->setProperty('newProperty', 'newPropertyValue');
     $sourceNode->setProperty('someProperty', 'someOverriddenPropertyValue');
     $this->nodeData->similarize($sourceNode);
     $expectedProperties = array('newProperty' => 'newPropertyValue', 'someProperty' => 'someOverriddenPropertyValue');
     $this->assertEquals($expectedProperties, $this->nodeData->getProperties());
 }
All Usage Examples Of Neos\ContentRepository\Domain\Model\NodeData::similarize