Bonjour.
Il s'agirait de créer 2 resources distinctes, App\Resource\Category et App\Resource\Classification, qui font référence à une seule et même entité App\Entity\Classification. On a 2 endpoints différents v1/classifications et v2/categories et l'idéal serait que mes 2 ressources étendent mon entity.
Pseudo code exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <?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; public function getId() { return $this->id; } // ... getter and setter methods }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?php // src/Resource/Classification.php use ApiPlatform\Core\Annotation\ApiResource; use App\Entity\Classification as ClassificationEntity; /** * ... * @ApiResource( * collectionOperations={"get"}, * itemOperations={"get"} * ) */ class Classification extends ClassificationEntity { // ... }et chaque ressource aurait son endpoint, son serializer, son normaliser, etc, etc, ... Bref, serait customisée à sa sauce.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?php // src/Resource/Category.php use ApiPlatform\Core\Annotation\ApiResource; use App\Entity\Classification as ClassificationEntity; /** * ... * @ApiResource( * collectionOperations={"get"}, * itemOperations={"get"} * ) */ class Category extends ClassificationEntity { // ... }
Sauf qu’apparemment, les annotations et l'héritage ne font pas bon ménage, et les infos de l'entity associée à la ressource se perdent en route. Du coup, j'ai des messages d'erreur en pagaille et rien ne fonctionne.
Évidemment, si j'associe des DataProvider à chacune de mes ressources et que je les branche sur les bons repository, ça marche. Mais du coup, je perds toutes les fonctionnalités natives de la couche Doctrine d'ApiPlatform et je dois tout réimplémenter (un exemple parmi tant d'autres: les @ApiFilter)
Y a-t-il un moyen plus simple d'associer plusieurs ressources à une même entité?
Voila maintenant de nombreuses heures que je m'y casse les dents, et je n'avance pas.
Merci d'avance pour votre aide.
Partager