/** * Generate slug on objects being updated during flush * if they require changing * * @param EventArgs $args * @return void */ public function onFlush(EventArgs $args) { $this->persisted = array(); $ea = $this->getEventAdapter($args); $om = $ea->getObjectManager(); $uow = $om->getUnitOfWork(); $this->manageFiltersBeforeGeneration($om); // process all objects being inserted, using scheduled insertions instead // of prePersist in case if record will be changed before flushing this will // ensure correct result. No additional overhead is encountered foreach ($ea->getScheduledObjectInsertions($uow) as $object) { $meta = $om->getClassMetadata(get_class($object)); if ($config = $this->getConfiguration($om, $meta->name)) { // generate first to exclude this object from similar persisted slugs result $this->generateSlug($ea, $object); $this->persisted[$ea->getRootObjectClass($meta)][] = $object; } } // we use onFlush and not preUpdate event to let other // event listeners be nested together foreach ($ea->getScheduledObjectUpdates($uow) as $object) { $meta = $om->getClassMetadata(get_class($object)); if (($config = $this->getConfiguration($om, $meta->name)) && !$uow->isScheduledForInsert($object)) { $this->generateSlug($ea, $object); $this->persisted[$ea->getRootObjectClass($meta)][] = $object; } } $this->manageFiltersAfterGeneration($om); AbstractWrapper::clear(); }