Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| 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> | ||