Skip to content

Instantly share code, notes, and snippets.

@trq
Created July 22, 2014 15:34
Show Gist options
  • Save trq/c685b7873011e7cbea80 to your computer and use it in GitHub Desktop.
Save trq/c685b7873011e7cbea80 to your computer and use it in GitHub Desktop.
<?php
namespace Foo\SiteBundle\EventListener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Gedmo\Sluggable\Util\Urlizer;
use Foo\SiteBundle\Entity\Category;
class SlugCreatorSubscriber implements EventSubscriber
{
public function getSubscribedEvents()
{
return array(
'prePersist',
'preUpdate',
);
}
public function prePersist(LifecycleEventArgs $args)
{
$this->createSlug($args);
}
public function preUpdate(LifecycleEventArgs $args)
{
$this->createSlug($args);
}
public function createSlug(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
$uow = $entityManager->getUnitOfWork();
if ($entity instanceof Category && $args->hasChangedField('name')) {
foreach ($entity->getPages() as $page) {
$slug = $page->getSlug();
$slug = str_replace(Urlizer::urlize($args->getOldValue('name')), Urlizer::urlize($args->getNewValue('name')), $slug);
$page->setSlug($slug);
$entityManager->persist($page);
$meta = $entityManager->getClassMetadata(get_class($page));
$uow->recomputeSingleEntityChangeSet($meta, $page);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment