Networking\InitCmsBundle\Entity\LayoutBlockListener::postPersist PHP Метод

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

public postPersist ( Doctrine\ORM\Event\LifecycleEventArgs $args )
$args Doctrine\ORM\Event\LifecycleEventArgs
    public function postPersist(LifecycleEventArgs $args)
    {
        $layoutBlock = $args->getEntity();
        if ($layoutBlock instanceof LayoutBlock) {
            if ($contentObject = $layoutBlock->getSnapshotContent()) {
                $contentObject = $this->serializer->deserialize($contentObject, $layoutBlock->getClassType(), 'json');
                $em = $args->getObjectManager();
                try {
                    $em->persist($contentObject);
                    $contentObject = $em->merge($contentObject);
                    $reflection = new \ReflectionClass($contentObject);
                    foreach ($reflection->getProperties() as $property) {
                        $method = sprintf('get%s', ucfirst($property->getName()));
                        if ($reflection->hasMethod($method) && ($var = $contentObject->{$method}())) {
                            if ($var instanceof ArrayCollection) {
                                foreach ($var as $v) {
                                    $em->merge($v);
                                }
                            }
                        }
                    }
                } catch (EntityNotFoundException $e) {
                    $em->detach($contentObject);
                    $classType = $layoutBlock->getClassType();
                    $contentObject = new $classType();
                    $em->persist($contentObject);
                }
                $em->flush($contentObject);
                $layoutBlock->setObjectId($contentObject->getId());
                $em->persist($layoutBlock);
                $em->flush($layoutBlock);
            }
        }
    }