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