symfony App\Entity\Engine\Car(自定义操作API平台,带YAML资源)中不存在操作类render

3pmvbmvn  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(156)

我想为我的API平台创建一个自定义操作。
但是如果你想用资源YAML文件创建自定义操作,文档是很差的。

  • 我声明 *
resources:

  App\Entity\Engine\Car:
    security: 'is_granted("ROLE_SUPER_ADMIN")'
    itemOperations:
      render:
        method: 'GET'
        path: '/engine/{id}/render'
        uriTemplate: '/engine/{id}/render'
        controller: App\Controller\Api\EngineRenderController
    operations:
      render:
        method: 'GET'
        path: '/engine/{id}/render'
        uriTemplate: '/engine/{id}/render'
        controller: App\Controller\Api\EngineRenderController
  • 使用此控制器API:*
<?php
    
    namespace App\Controller\Api;
    
    use App\Entity\Engine\Car;
    
    class EngineRenderController
    {
        public function __invoke(): array
        {
    
            return ['test' => 'I be back'];
    
        }
    }
  • 它产生他的:*
  • 操作类“render”在中的“App\Entity\Engine\Car”(/var/www/project/config/API_platform/resources.yaml)中不存在。(它是从“/var/www/project/config/routes/API_platform.yaml”导入的)。确保有支持“API_platform”类型的加载程序。*

什么是确切的声明可以使用?
如果使用resources.yaml和控制器API,为什么要在我的实体中声明任何东西?

  • 我只使用这个声明:*
itemOperations:
  render:
    method: 'GET'
    path: '/engine/{id}/render'
    uriTemplate: '/engine/{id}/render'
    controller: App\Controller\Api\EngineRenderController

我的swagger页面生成正确,但没有关于我的路径API或方法api与名称'render'

如何正确创建YAML格式和API平台上下文的自定义操作?

4sup72z8

4sup72z81#

很多时间过去了,我改变了很多事情。但是我可以分享我的配置,它运行自定义渲染方法API平台,如下所示:

API_platform.yaml

api_platform:
    resource: .
    type: api_platform
    prefix: /api

资源.yaml

资源:

App\Entity\Module\Car:
    normalizationContext:
        groups: ['read']
    denormalizationContext:
        groups: ['write']
    security: 'is_granted("ROLE_SUPER_ADMIN")'
    operations:
        ApiPlatform\Metadata\GetCollection: ~
        ApiPlatform\Metadata\Get:
        render:
          class: ApiPlatform\Metadata\Get
          uriTemplate: '/cars/{ID}/render'
          controller: App\Controller\Api\CarRenderController

CarRenderController.php

<?php

namespace App\Controller\Api;

use App\Entity\Car;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpKernel\Attribute\AsController;

#[AsController()]
class CarRenderController extends AbstractController
{
    private ManagerRegistry $em;

    public function __construct(ManagerRegistry $doctrine)
    {
        $this->em = $doctrine;

    }

    public function __invoke(Car $data): array
    {
        $items = $data->getItems();
        $items[0]->getTitle();

        return ['data' => $items[0]->getTitle()];

    }
}

注意:

  • 'AsController' PHP属性到CustomController for API
  • 声明GET操作到resources.yaml中,因为web中有很多例子

相关问题