Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
php:symfony:расширения_orm_extension [2024/04/15 20:23] – создано mirocow | php:symfony:расширения_orm_extension [2024/04/15 22:57] (текущий) – mirocow | ||
---|---|---|---|
Строка 2: | Строка 2: | ||
====== Расширения ORM / Extension ====== | ====== Расширения ORM / Extension ====== | ||
+ | |||
+ | * QueryCollectionExtensionInterface | ||
+ | * QueryItemExtensionInterface | ||
+ | |||
+ | ===== Настройки / Использование ===== | ||
+ | |||
+ | services.yaml | ||
+ | <code yaml> | ||
+ | parameters: | ||
+ | |||
+ | services: | ||
+ | |||
+ | App\Extension\CurrentUserExtension: | ||
+ | tags: | ||
+ | - { name: api_platform.doctrine.orm.query_extension.collection } | ||
+ | - { name: api_platform.doctrine.orm.query_extension.item } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | |||
+ | namespace App\Extension; | ||
+ | |||
+ | 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\Entity\Post; | ||
+ | use App\Entity\User; | ||
+ | use Doctrine\ORM\QueryBuilder; | ||
+ | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; | ||
+ | use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; | ||
+ | |||
+ | final class CurrentUserExtension implements QueryCollectionExtensionInterface, | ||
+ | { | ||
+ | private $tokenStorage; | ||
+ | private $authorizationChecker; | ||
+ | const ENTITIES = [ | ||
+ | Post:: | ||
+ | User::class | ||
+ | ]; | ||
+ | |||
+ | public function __construct(TokenStorageInterface $tokenStorage, | ||
+ | { | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * {@inheritdoc} | ||
+ | */ | ||
+ | public function applyToCollection(QueryBuilder $queryBuilder, | ||
+ | { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * {@inheritdoc} | ||
+ | */ | ||
+ | public function applyToItem(QueryBuilder $queryBuilder, | ||
+ | { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * | ||
+ | * @param QueryBuilder $queryBuilder | ||
+ | * @param string $resourceClass | ||
+ | */ | ||
+ | private function addWhere(QueryBuilder $queryBuilder, | ||
+ | { | ||
+ | $user = $this-> | ||
+ | if ($user instanceof User && in_array($resourceClass, | ||
+ | && !$this-> | ||
+ | ) { | ||
+ | $rootAlias = $queryBuilder-> | ||
+ | $queryBuilder-> | ||
+ | $queryBuilder-> | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== Symfony / API Platform ====== | ||
+ | |||
+ | {{topic> |