Skip to content

Commit

Permalink
Add localized item doctrine extension
Browse files Browse the repository at this point in the history
  • Loading branch information
subiabre committed Jan 14, 2025
1 parent f59f96f commit 7abaee0
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions src/Doctrine/LocalizedItemExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace App\Doctrine;

use ApiPlatform\Doctrine\Orm\Extension\QueryResultItemExtensionInterface;
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use ApiPlatform\Metadata\Operation;
use App\Entity\Interface\LocalizedContentInterface;
use Doctrine\ORM\QueryBuilder;

/**
* Adds localization hints to translatable entity queries.
*
* @see https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/doc/translatable.md#using-orm-query-hint
*/
final class LocalizedItemExtension implements QueryResultItemExtensionInterface
{
use LocalizedContentTrait;

/**
* Same priority as `api_platform.doctrine.orm.query_extension.pagination`.
* This ensures other filters can have precedence over localization.
*
* @see https://api-platform.com/docs/core/extensions/#custom-doctrine-orm-extension
*/
public static function getDefaultPriority(): int
{
return -64;
}

public function supportsResult(string $resourceClass, ?Operation $operation = null, array $context = []): bool
{
$reflectionClass = new \ReflectionClass($resourceClass);

return $reflectionClass->implementsInterface(LocalizedContentInterface::class);
}

public function getResult(
QueryBuilder $queryBuilder,
?string $resourceClass = null,
?Operation $operation = null,
array $context = []
): ?object {
$query = $this->addLocalizationHints($queryBuilder, $this->getContextLanguages($context));

return $query->getOneOrNullResult();
}

public function applyToItem(
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
array $identifiers,
?Operation $operation = null,
array $context = []
): void {}
}

0 comments on commit 7abaee0

Please sign in to comment.