Skip to content

Modèle dynamique

Le moteur de modèle dynamique est le cœur de la plateforme low-code de Doggy. Il marque les champs métier via l'annotation @Ef combinée aux attributs PHP 8, et génère automatiquement les migrations de base de données, l'API et l'interface d'administration.

Aperçu

Le système de modèle dynamique est construit sur deux annotations centrales :

  • Ef : marque le regroupement et les propriétés de métadonnées des champs métier
  • EfGroup : définit les regroupements de champs

Les annotations sont définies dans src/Annotation/Ef.php et src/Annotation/EfGroup.php :

php
// src/Annotation/Ef.php
class Ef
{
    public $value = [];

    public function __construct(array $data)
    {
        $this->value['group'] = $data['group'] ?? null;
        $this->value['bf'] = $data['isBF'] ?? false;
    }
}

Définir un modèle

php
namespace App\Entity\Organization;

use App\Annotation\Ef;
use App\Entity\Traits\CommonTrait;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Table(name: 'org_department')]
class Department
{
    use CommonTrait;

    #[ORM\Id]
    #[ORM\Column(type: 'uuid', unique: true)]
    #[ORM\GeneratedValue(strategy: 'CUSTOM')]
    #[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
    private $id;

    #[Ef(displayName: '部门名称', required: true)]
    #[ORM\Column(length: 100)]
    private string $name;

    #[Ef(displayName: '部门编码', searchable: true)]
    #[ORM\Column(length: 50, nullable: true)]
    private ?string $code = null;
}

Gestion des entités

Les entités peuvent être consultées et gérées dans l'interface d'administration, sous Plateforme low-code → Gestion des entités (App\Controller\Admin\Platform\EntityController) :

Principaux répertoires d'entités

RépertoireEntitésDescription
Entity/Organization/Department, Company, Corporation, Employee, Position, PositionLevelStructure organisationnelle et employés
Entity/Platform/Entity, EntityProperty, View, ViewField, DataGrid, Menu, DataSourceMoteur low-code
Entity/Security/PasswordPolicy, PasswordStrengthRule, PasswordResetMethod, WebauthnCredentialSystème de sécurité
Entity/Storage/File, StorageConfig, UploadSessionStockage de fichiers
Entity/System/AuditLog, Task, TaskLog, EmailConfig, EmailTemplate, EmailLog, SystemCalendarEventInfrastructure

CommonTrait

Toutes les entités combinent les capacités suivantes via CommonTrait (src/Entity/CommonTrait.php) :

php
trait CommonTrait
{
    use SoftDeleteableEntity;    // 软删除(deletedAt 字段)
    use TimestampableEntity;     // 时间戳(createdAt, updatedAt)
    use BlameableEntity;        // 操作人(createdBy, updatedBy)

    #[ORM\ManyToOne(targetEntity: Corporation::class)]
    private $corporation;

    #[ORM\ManyToOne(targetEntity: Company::class)]
    private $company;
}

Génération automatique

Une fois le modèle défini, des commandes telles que EfInitEntityCommand traitent automatiquement :

  • La génération des fichiers de migration de base de données
  • Le rendu de l'interface CRUD
  • Les règles de validation des données
  • Les contrôles de permission

Interface d'administration

Accédez à Plateforme low-code → Gestion des entités (/admin/platform/entity) pour effectuer des opérations visuelles :

  • Édition des propriétés d'entité (EntityProperty)
  • Gestion des groupes de propriétés (EntityPropertyGroup)
  • Génération de migration en un clic
  • Configuration des relations

Open source sous licence MIT | Copyright © 2026 Doggy