symfony 升级后,我的实体不再在API PLATFORM上公开

5ssjco0h  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(146)

我刚刚将API平台升级到3.0版。经过几次经典的修改后链接到版本升级,尽管使用了:php bin/console api:upgrade-resource
我注意到,当我转到API文档时,我的实体不再公开,如果我尝试访问端点,我会收到一个路由错误:找不到“GET https://127.0.0.1:9000/api/XXX”的路由
我替换了实体中使用的所有ApiResource,并重写了注解。
实体示例:

<?php

namespace App\Entity\Test;

use ApiPlatform\Metadata\ApiResource;
#[ApiResource(

collectionOperations: [
    'get',
    'post' => [
        'denormalization_context' => ['groups' => ['create:xxx']]
    ]
],
    itemOperations: [
    'get' => [
        'normalization_context' => ['groups' => ['read:fully:xxx']]
    ],
    'put' => [
        'denormalization_context' => ['groups' => ['update:xxx']]
    ],
    'delete'
],
    normalizationContext: ['groups' => ['read:xxx']]

)]

class Departement
{
....
}

提前感谢!
好吧,我手动更新了一个小实体,现在她暴露了!

<?php

namespace App\Entity\Agorha;

//use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use App\Entity\ChoixEcole;
use App\Repository\Agorha\EcoleRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

#[ORM\Entity(repositoryClass: EcoleRepository::class)]
#[ORM\Table(name: "agorha_ecole")]
#[ORM\HasLifecycleCallbacks()]

#[ApiResource(operations: [
    new Get(),
    new GetCollection()
])]
#[
    UniqueEntity('code')
]
class Ecole
{
    #[ORM\Id()]
    #[ORM\GeneratedValue()]
    #[ORM\Column(type: "integer")]
    private $id;

我没有看到升级命令的结果,结果是一个错误,因此什么也没做。事实上,它似乎不存在

Command "api:upgrade-resource" is not defined.

有人会知道为什么吗

u1ehiz5o

u1ehiz5o1#

尽管调用了api:upgrade-resource命令,但实体的格式仍然是〈= v2.6。
请参阅迁移文档:您应该使用新的元数据类Get()Post()等,而不是'get''post'等。
您确定迁移命令没有返回错误吗?在我的情况下(从2.6迁移到3.0),迁移命令由于未知原因(在控制台中找不到)不可用。
尝试手动将一个实体迁移到新格式,并查看openApi文档,看看端点是否恢复正常。

**编辑:**为什么api:upgrade-resource不起作用?

据我所知,在v2.7中提供了迁移命令以准备迁移到3.0,但v3.0中已删除了该命令。因此,根据文档进行迁移的正确方法是:
1.迁移到2.7
1.调用api:upgrade-resource并检查是否全部正常工作
1.然后迁移到3.0

3phpmpom

3phpmpom2#

像@MendelYev说我应该在升级之前运行api upgrade命令。现在我必须使用PHP属性和Doctrine中的新Metadata类手动升级我的实体

相关问题