src/Doctrine/Extensions/TranslationApiExtension.php line 58
<?php
namespace App\Doctrine\Extensions;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use App\IlaveU\ShopBundle\Entity\Product\Product;
use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Gedmo\Translatable\TranslatableListener;
use MWS\NutritionCalculatorBundle\Entity\DogBreed;
use Symfony\Component\HttpFoundation\RequestStack;
final class TranslationApiExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
{
/**
* @var RequestStack
*/
private $requestStack;
/**
* DogBreedExtension constructor.
* @param RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
{
$this->addHints($queryBuilder, $resourceClass);
}
/**
* @param QueryBuilder $queryBuilder
* @param QueryNameGeneratorInterface $queryNameGenerator
* @param string $resourceClass
* @param array $identifiers
* @param string|null $operationName
* @param array $context
*/
public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = [])
{
$this->addHints($queryBuilder, $resourceClass);
}
/**
*
* @param QueryBuilder $queryBuilder
* @param string $resourceClass
*/
private function addHints(QueryBuilder $queryBuilder, string $resourceClass)
{
$queryBuilder = $queryBuilder->getQuery();
$queryBuilder->setHint(
Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
);
// locale
$queryBuilder->setHint(
TranslatableListener::HINT_TRANSLATABLE_LOCALE,
$this->requestStack->getCurrentRequest()->getLocale() // take locale from session or request etc.
);
// fallback
$queryBuilder->setHint(
TranslatableListener::HINT_FALLBACK,
1 // fallback to default values in case if record is not translated
);
$queryBuilder->setHint(TranslatableListener::HINT_INNER_JOIN, true);
$queryBuilder->getResult();
}
}