/** * @param LifecycleEventArgs $args * @return mixed|void */ public function preUpdate(LifecycleEventArgs $args) { $entity = $args->getObject(); $em = $args->getObjectManager(); $uow = $em->getUnitOfWork(); if ($entity instanceof ContentRoute) { $template = $this->templates[$entity->getTemplateName()]; $changeset = $uow->getEntityChangeSet($entity); if (isset($changeset['templateName']) && $args->hasChangedField('templateName')) { $entity->setTemplate($template['template']); $entity->setController($template['controller']); $uow->recomputeSingleEntityChangeSet($em->getClassMetadata("NetworkingInitCmsBundle:ContentRoute"), $entity); } } }
/** * @param LifecycleEventArgs $args * @param string $event */ protected function handleEvent(LifecycleEventArgs $args, $event) { $object = $args->getObject(); $om = $args->getObjectManager(); $class = get_class($object); $classMetadata = $this->metadataFactory->getMetadataForClass($class); $classMetadataInfo = $om->getClassMetadata($class); $identifierFields = $classMetadataInfo->getIdentifierFieldNames(); foreach ($classMetadata->propertyMetadata as $propertyMetadata) { if ($propertyMetadata instanceof PropertyMetadata && count($propertyMetadata->slugFields)) { $hasIdentifierFields = count(array_intersect($identifierFields, $propertyMetadata->slugFields)) > 0; if ($event == 'prePersist' && $hasIdentifierFields || $event == 'postPersist' && !$hasIdentifierFields) { continue; // generate slug in another event } $slug = null; if ($event == 'preUpdate') { if ($args->hasChangedField($propertyMetadata->name)) { // generate custom slug $slug = $this->slugger->slugify($args->getNewValue($propertyMetadata->name), $propertyMetadata->slugSeparator); } elseif (null !== $propertyMetadata->getValue($object)) { continue; // no changes } } else { // generate custom slug $slug = $this->slugger->slugify($propertyMetadata->getValue($object), $propertyMetadata->slugSeparator); } if (!trim($slug)) { // generate slug from the sluggable fields $slug = $this->generateSlugFromMetadata($object, $propertyMetadata->slugFields, $propertyMetadata->slugSeparator); } $id = $event == 'preUpdate' && method_exists($object, 'getId') ? $object->getId() : null; // generate unique slug $slug = $this->generateUniqueSlug($om, $object, $propertyMetadata->name, $slug, $propertyMetadata->slugSeparator, $id); $propertyMetadata->setValue($object, $slug); $this->recomputeSingleObjectChangeSet($om, $object); } } }