api-platformmake-resource
Génère une API Resource complète avec attribut
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Génère une API Resource complète avec attribut
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Audite un projet API Platform existant et produit un rapport de bonnes pratiques, performances et sécurité
Génère des DTOs (input/output) API Platform avec mapping vers les entités
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
Génère un State Processor API Platform pour personnaliser la persistence des données
Génère un State Provider API Platform pour personnaliser la récupération de données
Génère des tests fonctionnels API Platform (PHPUnit/ApiTestCase) pour une resource
| name | api-platform:make-resource |
| description | Génère une API Resource complète avec attribut |
| argument-hint | <nom-entité> |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob","Skill"] |
| version | 1.0.0 |
| license | MIT |
Génère une API Resource complète pour API Platform : attribut #[ApiResource], opérations CRUD, groupes de sérialisation, validation et configuration associée.
src/Entity/{ResourceName}.php (ou modification si existant)src/ApiResource/{ResourceName}.php (si DTO séparé)IMPORTANT : Exécute ce workflow étape par étape :
$ARGUMENTS est fourni, utiliser comme nom de la resourceQuestion: "Quel est le nom de la resource API à créer ?"
Header: "Resource"
src/Entity/{ResourceName}.php#[ApiResource] à l'entité existanteQuestion: "Comment exposer la resource ?"
Header: "Stratégie"
Options:
- "Entité directe (Recommandé)" : "Attribut #[ApiResource] directement sur l'entité Doctrine"
- "DTO séparé" : "Classe DTO dédiée avec State Provider/Processor personnalisés"
Question: "Quelles opérations exposer ?"
Header: "Opérations"
Options:
- "CRUD complet" : "GetCollection, Get, Post, Put, Patch, Delete"
- "Lecture seule" : "GetCollection et Get uniquement"
- "Écriture seule" : "Post, Put, Patch, Delete uniquement"
- "Personnalisé" : "Sélection manuelle des opérations"
{resourceName}:read — Propriétés exposées en lecture (GET){resourceName}:write — Propriétés acceptées en écriture (POST/PUT/PATCH){resourceName}:list — Propriétés pour les collections (GetCollection)#[Groups] sur chaque propriétécomposer.json avec Readautoload.psr-4App par défautapi-platform dans composer.jsonLe package api-platform/core ne semble pas installé.Installation recommandée : composer require api-platform/api-packSi entité directe :
<?php
declare(strict_types=1);
namespace {namespace}\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
operations: [
new GetCollection(),
new Get(),
new Post(),
new Put(),
new Patch(),
new Delete(),
],
normalizationContext: ['groups' => ['{resourceName}:read']],
denormalizationContext: ['groups' => ['{resourceName}:write']],
)]
#[ORM\Entity]
class {ResourceName}
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['{resourceName}:read'])]
private ?int $id = null;
// Propriétés avec #[Groups] et #[Assert\...]
}
Si DTO séparé :
<?php
declare(strict_types=1);
namespace {namespace}\ApiResource;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use {namespace}\State\{ResourceName}Provider;
use {namespace}\State\{ResourceName}Processor;
#[ApiResource(
operations: [
new GetCollection(provider: {ResourceName}Provider::class),
new Get(provider: {ResourceName}Provider::class),
],
provider: {ResourceName}Provider::class,
processor: {ResourceName}Processor::class,
)]
class {ResourceName}
{
public ?int $id = null;
// Propriétés du DTO
}
#[Assert\NotBlank]#[Assert\Length(max: N)]#[Assert\Email]#[Assert\Positive] si pertinentResource API {ResourceName} générée
Fichiers créés/modifiés :
- src/Entity/{ResourceName}.php (ou src/ApiResource/{ResourceName}.php)
Opérations exposées :
- GET /api/{resource_names} (collection)
- GET /api/{resource_names}/{id} (item)
- POST /api/{resource_names}
- PUT /api/{resource_names}/{id}
- PATCH /api/{resource_names}/{id}
- DELETE /api/{resource_names}/{id}
Groupes de sérialisation :
- {resourceName}:read — Lecture
- {resourceName}:write — Écriture
- {resourceName}:list — Collection
Prochaines étapes :
- Créer la migration : php bin/console make:migration
- Ajouter des filtres : /api-platform:make-filter {ResourceName}
- Générer les tests : /api-platform:make-test {ResourceName}
- Configurer la sécurité : security: "is_granted('ROLE_USER')"
#[ApiResource] avec opérations explicitessecurity sur les opérations sensibles