src/Doctrine/Extensions/TranslationApiExtension.php line 35

  1. <?php
  2. namespace App\Doctrine\Extensions;
  3. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
  4. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
  6. use App\IlaveU\ShopBundle\Entity\Product\Product;
  7. use Doctrine\ORM\Query;
  8. use Doctrine\ORM\QueryBuilder;
  9. use Gedmo\Translatable\TranslatableListener;
  10. use MWS\NutritionCalculatorBundle\Entity\DogBreed;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. final class TranslationApiExtension implements QueryCollectionExtensionInterfaceQueryItemExtensionInterface
  13. {
  14.  /**
  15.      * @var RequestStack
  16.      */
  17.     private $requestStack;
  18.     /**
  19.      * DogBreedExtension constructor.
  20.      * @param RequestStack $requestStack
  21.      */
  22.     public function __construct(RequestStack $requestStack)
  23.     {
  24.         $this->requestStack $requestStack;
  25.     }
  26.     public function applyToCollection(QueryBuilder $queryBuilderQueryNameGeneratorInterface $queryNameGeneratorstring $resourceClassstring $operationName null)
  27.     {
  28.         $this->addHints($queryBuilder$resourceClass);
  29.     }
  30.     /**
  31.      * @param QueryBuilder $queryBuilder
  32.      * @param QueryNameGeneratorInterface $queryNameGenerator
  33.      * @param string $resourceClass
  34.      * @param array $identifiers
  35.      * @param string|null $operationName
  36.      * @param array $context
  37.      */
  38.     public function applyToItem(QueryBuilder $queryBuilderQueryNameGeneratorInterface $queryNameGeneratorstring $resourceClass, array $identifiersstring $operationName null, array $context = [])
  39.     {
  40.         $this->addHints($queryBuilder$resourceClass);
  41.     }
  42.     /**
  43.      *
  44.      * @param QueryBuilder $queryBuilder
  45.      * @param string       $resourceClass
  46.      */
  47.     private function addHints(QueryBuilder $queryBuilderstring $resourceClass)
  48.     {
  49.         
  50.             $queryBuilder $queryBuilder->getQuery();
  51.             $queryBuilder->setHint(
  52.                 Query::HINT_CUSTOM_OUTPUT_WALKER,
  53.                 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
  54.             );
  55.             // locale
  56.             $queryBuilder->setHint(
  57.                 TranslatableListener::HINT_TRANSLATABLE_LOCALE,
  58.                 $this->requestStack->getCurrentRequest()->getLocale() // take locale from session or request etc.
  59.             );
  60.             // fallback
  61.             $queryBuilder->setHint(
  62.                 TranslatableListener::HINT_FALLBACK,
  63.                 // fallback to default values in case if record is not translated
  64.             );
  65.             $queryBuilder->setHint(TranslatableListener::HINT_INNER_JOINtrue);
  66.             $queryBuilder->getResult();
  67.         
  68.     }
  69. }