Files
2025-11-29 17:58:52 +08:00
..
2025-11-29 17:58:52 +08:00
2025-11-29 17:58:52 +08:00
2025-11-29 17:58:52 +08:00

Framework Make Entity

Génère une entité Doctrine avec repository selon principes Elegant Objects.

Vue d'ensemble

Cette skill crée une entité Doctrine complète respectant les principes Elegant Objects, avec son repository et son interface.

Caractéristiques

Entité générée

  • Constructeur privé + factory statique create()
  • Classe final
  • Propriétés privées avec getters uniquement
  • Pas de setters (immutabilité encouragée)
  • Implémentation des interfaces de contrats
  • Traits Atournayre intégrés
  • Attributs Doctrine ORM configurés
  • Méthode toLog() pour LoggableInterface

Repository généré

  • Extends ServiceEntityRepository
  • Classe final
  • Interface dédiée
  • Prêt pour méthodes custom

Utilisation

Use skill framework:make:entity

Vous serez invité à fournir :

  1. Nom de l'entité (PascalCase)
  2. Liste des propriétés avec types

Exemple d'utilisation

EntityName: Product
Properties:
  - name: string
  - description: string
  - price: float
  - stock: int
  - isActive: bool

Génère :

// src/Entity/Product.php
final class Product implements LoggableInterface, DatabaseEntityInterface, ...
{
    use DatabaseTrait;
    use NullTrait;
    use DependencyInjectionTrait;

    private function __construct(
        #[ORM\Id]
        #[ORM\Column(type: 'uuid')]
        private Uuid $id,
        #[ORM\Column(type: 'string')]
        private string $name,
        // ...
    ) {}

    public static function create(Uuid $id, string $name, ...): self
    {
        return new self(id: $id, name: $name, ...);
    }

    public function id(): Uuid { return $this->id; }
    public function name(): string { return $this->name; }
    // ...
}

Structure créée

src/
├── Entity/
│   └── {EntityName}.php
└── Repository/
    ├── {EntityName}Repository.php
    └── {EntityName}RepositoryInterface.php

Prérequis

  • Contracts doivent exister (appelle automatiquement framework:make:contracts si absents)
  • Projet Symfony avec Doctrine ORM configuré
  • Framework atournayre/framework installé

Types de propriétés supportés

  • Scalaires : string, int, float, bool
  • UUID : Uuid (Symfony\Component\Uid\Uuid)
  • DateTime : \DateTimeImmutable
  • Arrays : array
  • Relations Doctrine (à configurer manuellement après génération)

Principes Elegant Objects appliqués

  • Constructeur privé
  • Factory statique pour création
  • Classe finale (pas d'héritage)
  • Pas de setters publics
  • Propriétés privées avec getters
  • Interfaces pour tous les contrats
  • Immutabilité encouragée