我刚刚将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.
有人会知道为什么吗
2条答案
按热度按时间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
3phpmpom2#
像@MendelYev说我应该在升级之前运行api upgrade命令。现在我必须使用PHP属性和Doctrine中的新Metadata类手动升级我的实体