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étierEfGroup: définit les regroupements de champs
Les annotations sont définies dans src/Annotation/Ef.php et src/Annotation/EfGroup.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
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épertoire | Entités | Description |
|---|---|---|
Entity/Organization/ | Department, Company, Corporation, Employee, Position, PositionLevel | Structure organisationnelle et employés |
Entity/Platform/ | Entity, EntityProperty, View, ViewField, DataGrid, Menu, DataSource | Moteur low-code |
Entity/Security/ | PasswordPolicy, PasswordStrengthRule, PasswordResetMethod, WebauthnCredential | Système de sécurité |
Entity/Storage/ | File, StorageConfig, UploadSession | Stockage de fichiers |
Entity/System/ | AuditLog, Task, TaskLog, EmailConfig, EmailTemplate, EmailLog, SystemCalendarEvent | Infrastructure |
CommonTrait
Toutes les entités combinent les capacités suivantes via CommonTrait (src/Entity/CommonTrait.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