Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>[php api-platform symfony]}} ====== Расширения ORM / Extension ====== services.yaml <code yaml> parameters: services: App\Serializer\UserContextBuilder: decorates: 'api_platform.serializer.context_builder' arguments: [ '@App\Serializer\UserContextBuilder.inner' ] autoconfigure: false </code> <code php> <?php namespace App\Extension; use Doctrine\ORM\QueryBuilder; use App\Repository\UserRepository; use ApiPlatform\Metadata\Operation; use Symfony\Bundle\SecurityBundle\Security; use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface; use ApiPlatform\Doctrine\Orm\Extension\QueryItemExtensionInterface; use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface; class CurrentUserExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface { public function __construct( private readonly Security $security, private readonly UserRepository $userRepository ) { } public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, Operation $operation = null, array $context = []): void { $this->addWhere($queryBuilder); } public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass,array $identifiers, Operation $operation = null, array $context = []): void { $this->addWhere($queryBuilder); } private function addWhere(QueryBuilder $queryBuilder): void { $user = $this->userRepository->findOneBy([ 'username' => $this->security->getUser()->getUserIdentifier() ]); if ($user === null) { return; } $rootAlias = $queryBuilder->getRootAliases()[0]; $queryBuilder->innerJoin(sprintf('%s.createdBy', $rootAlias), 'u'); $queryBuilder->andWhere(sprintf('%s.username = :current_user', 'u' )); $queryBuilder->setParameter('current_user', $user->getUserIdentifier()); } } </code>СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal