我想创建2个不同的资源App \ Resource \ Category et App \ Resource \ Classification,它们将与同一实体App \ Entity \ Classification关联。我们有2个不同的端点v1 /分类和v2 /类别。我希望这两种资源都可以扩展同一实体。
伪代码示例:
<?php
// src/Entity/Classification.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ClassificationRepository")
*/
class Classification
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $code;
/**
* @ORM\Column(type="string", length=255)
*/
private $label;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ClassificationAttribute", mappedBy="classification")
*/
private $classificationAttributes;
public function __construct()
{
$this->classificationAttributes = new ArrayCollection();
}
public function getId()
{
return $this->id;
}
// ... getter and setter methods
}
<?php
// src/Resource/Classification.php
namespace App\Resource;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Classification as ClassificationEntity;
/**
* ...
* @ApiResource(
* collectionOperations={"get"},
* itemOperations={"get"}
* )
*/
class Classification extends ClassificationEntity
{
// ...
}
<?php
// src/Resource/Category.php
namespace App\Resource;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Classification as ClassificationEntity;
/**
* ...
* @ApiResource(
* collectionOperations={"get"},
* itemOperations={"get"}
* )
*/
class Category extends ClassificationEntity
{
// ...
}
每个资源将具有其端点,其序列化器,其规范化器等,等等……总之,每个资源将以其自己的方式进行定制。
除了不能同时使用注释和继承:不使用扩展实体的注释。
我可以将不同的DataProvider关联到每个资源,然后将这些DataProvider插入存储库中。但是这样做,我失去了Doctrine ORM扩展的所有本机功能,而不得不重新实现我使用的每一个功能(例如:@ApiFilter)
有没有更简单的方法将许多资源关联到同一实体?
谢谢您的帮助。
答案 0 :(得分:0)
您需要将Resource文件夹添加到api / config / packages / api_platform.yaml中的映射路径:
api_platform:
mapping:
paths:
- '%kernel.project_dir%/src/Entity'
- '%kernel.project_dir%/src/Resource'
不在这些路径中的资源将被忽略。