<?php
namespace App\News\EventSubscriber;
use App\Core\Service\Slugger;
use Pimcore\Event\DataObjectEvents;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Model\DataObject\News;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class NewsSlugSubscriber implements EventSubscriberInterface
{
protected $slugger;
public function __construct(Slugger $slugger)
{
$this->slugger = $slugger;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
DataObjectEvents::PRE_UPDATE => 'onPreUpdateObject',
];
}
public function onPreUpdateObject(DataObjectEvent $event)
{
$object = $event->getObject();
$className = (new \ReflectionClass($object))->getShortName();
if (!in_array($className, ['News'])) {
return;
}
if (!$object instanceof News) {
throw new \Exception(sprintf('%s is not of type News', get_class($object)), 1);
}
$languages = \Pimcore\Tool::getValidLanguages();
foreach ($languages as $language) {
try {
$name = $object->getName($language);
$object->setSlug($this->slugger->slugify($name), $language);
} catch (\Throwable $th) {
dd([$language, $name]);
}
}
}
}