Skip to content

Instantly share code, notes, and snippets.

@vguardiola
Last active June 13, 2017 07:11
Show Gist options
  • Select an option

  • Save vguardiola/3c1d5bfa63c77af3579e3992779f57b6 to your computer and use it in GitHub Desktop.

Select an option

Save vguardiola/3c1d5bfa63c77af3579e3992779f57b6 to your computer and use it in GitHub Desktop.
Disable filter oneLocale (A2LiX I18n Doctrine) on FOSElastica populate data
<?php
use Doctrine\Common\Util\ClassUtils;
use Doctrine\ORM\EntityManager;
use FOS\ElasticaBundle\Event\TransformEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class TransaltionsTrasnformerListener implements EventSubscriberInterface
{
/** @var EntityManager */
private $entityManager;
public function __construct($entityManager)
{
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents()
{
return [
TransformEvent::PRE_TRANSFORM => 'doPreTransform',
TransformEvent::POST_TRANSFORM => 'doPostTransform',
];
}
/**
* @param TransformEvent $event
*
* @throws \InvalidArgumentException
*/
public function doPreTransform(TransformEvent $event)
{
if ($this->hasTranslations($event->getObject()) && $this->entityManager->getFilters()->isEnabled('oneLocale')) {
$this->entityManager->getFilters()->disable('oneLocale');
}
}
/**
* @param TransformEvent $event
*
* @throws \InvalidArgumentException
*/
public function doPostTransform(TransformEvent $event)
{
if ($this->hasTranslations($event->getObject()) && !$this->entityManager->getFilters()->isEnabled('oneLocale')) {
$this->entityManager->getFilters()->enable('oneLocale');
}
}
/**
* @param $obj
*
* @return bool
*/
private function hasTranslations($obj)
{
$className = ClassUtils::getClass($obj);
$reflectionClass = new \ReflectionClass($className);
return in_array('A2lix\I18nDoctrineBundle\Doctrine\ORM\Util\Translatable', $reflectionClass->getTraitNames(), true);
}
}
@vguardiola
Copy link
Author

Service declaration

    <service class="TransaltionsTrasnformerListener">
        <argument type="service" id="doctrine.orm.default_entity_manager"/>
        <tag name="kernel.event_subscriber"/>
    </service>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment