如何通过 yaml 将自定义路由绑定到控制器的方法而不触发来自 api-platform 和 symfony 的自动查询?

How to bind a custom route to a method of a controller via yaml without triggering an automatic query from api-platform and symfony?

预期行为:

实际行为:

我在向 table 添加数据时发现了查询。 随着我在 table 上添加更多数据,性能变得越来越长。 我永远不会在某个时候达到 Why?!。 我检查了我的数据库,发现 myentity table 上的 select 都处于活动状态。 我在文档上搜索了一下,唯一能找到的是:

pagination_partial: true

在 yaml 中将此添加到 export 路由时,它仍会执行查询,但由于现在已分页,因此花费的时间会少很多。


我的问题是:

如何完全删除此查询?


在Controller/MyEntityController.php中:

        namespace App\Controller;
        
        use App\Entity\MyEntity;
        use Doctrine\ORM\EntityManagerInterface;
        use Exception;
        // use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
        use Symfony\Component\Translation\Exception\NotFoundResourceException;
        use Symfony\Bundle\FrameworkBundle\Console\Application;
        use Symfony\Component\Console\Input\ArrayInput;
        use Symfony\Component\Console\Output\NullOutput;
        use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
        use Symfony\Component\HttpFoundation\File\UploadedFile;
        use Symfony\Component\HttpFoundation\Request;
        use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
        use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
        use Symfony\Component\HttpKernel\KernelInterface;

        class MyEntityController// extends AbstractController
        {
    
        private ParameterBagInterface $params;
        private EntityManagerInterface $entityManager;
    
        public function __construct(ParameterBagInterface $params, EntityManagerInterface $entityManager)
        {
            $this->params = $params;
            $this->entityManager = $entityManager;
        }
    
        public function export(KernelInterface $kernel): array
        {
            dd("why?!");
    }
// ...
}

在 ressource/entity.yaml 中:

resources:
  App\Entity\MyEntity:
    shortName: ~
    description: ~
    attributes:
      order:
        referenceCafHuissier: asc
        montantEcheance: asc

      # security: 'is_granted("ROLE_USER")'
      normalization_context:
        groups: ['myentity:read']
      denormalization_context:
        groups: ['myentity:write']
    properties:
    ...
    collectionOperations:
    ...
      exportcsv:
        security: 'is_granted("ROLE_MYENTITY_ADMIN")'
        # pagination_partial: true
        method: 'GET'
        path: '/myentity/export'
        controller: 'App\Controller\MyEntityController::export'
        openapi_context:
          summary: Export CSV
          parameters: []
          responses:
            '200':
              description: Génération réussi de l'export CSV
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      type:
                        type: string
                        description: mime-type du fichier.
                      content:
                        type: string
                        description: Base64 du contenu du fichier.

您所说的查询很可能是由 ReadListener 提出的。

要禁用它,请将 read 属性 设置为 false,如 here 所述:

collectionOperations:
    exportcsv:
        method: get
        path: /pensions/export
        # ...
        read: false