[sf 5.2] Api Platform et les requêtes POST avec données multiples
Bonjour à vous tous,
Pour un de mes projets, j'utilise Symfony 5.2 et Api Platform 2.6 en tant que back-end. Le front-end est développé en Node.js et Express.
L'API fonctionne très bien pour les fonctions GET, POST, PUT .... Mais de façon unitaire.
J'ai besoin d'envoyer en masse des données à l'API via une route POST. En gros je veux lui envoyer un tableau d'objet en JSON et que l'API désérialise et intègre en BDD tous les objets.
En lisant la documentation officielle et le git du projet Api platform, il n'y a pas de possibilité "out of box" de faire cela.
J'ai lu plusieurs pistes comme le DTO, controller particulier ... Je m'y pert.
Quelqu'un pourrait-il m'aider à concevoir une route pour faire un import en masse ?
Mon entité sur laquelle je souhaite faire un import en masse
Code:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| <?php
namespace App\Entity;
use App\Repository\PosteSourceRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use App\Controller\PosteSourceMultiController;
/**
* @ApiResource(
* normalizationContext={"groups"={"postesource:lire"}},
* denormalizationContext={"groups"={"postesource:ecrire"}},
* )
* @ORM\Entity(repositoryClass=PosteSourceRepository::class)
* @UniqueEntity(
* fields="nom",
* message="Le poste source existe déjà."
* )
*/
class PosteSource
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"postesource:lire"})
*/
private $id;
/**
* @ORM\Column(type="string", length=20)
* @Groups({"postesource:lire", "postesource:ecrire"})
*/
private $nom;
/**
* @ORM\Column(type="string", length=50)
* @Groups({"postesource:lire", "postesource:ecrire"})
*/
private $departement;
/**
* @ORM\OneToMany(targetEntity=Omt::class, mappedBy="posteSource", orphanRemoval=true)
* @Groups({"postesource:lire"})
* @ApiSubresource
*/
private $omt;
public function __construct()
{
$this->omt = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getDepartement(): ?string
{
return $this->departement;
}
public function setDepartement(string $departement): self
{
$this->departement = $departement;
return $this;
}
/**
* @return Collection|Omt[]
*/
public function getOmt(): Collection
{
return $this->omt;
}
public function addOmt(Omt $omt): self
{
if (!$this->omt->contains($omt)) {
$this->omt[] = $omt;
$omt->setPosteSource($this);
}
return $this;
}
public function removeOmt(Omt $omt): self
{
if ($this->omt->removeElement($omt)) {
// set the owning side to null (unless already changed)
if ($omt->getPosteSource() === $this) {
$omt->setPosteSource(null);
}
}
return $this;
}
} |
Merci beaucoup de votre aide :)