Skip to content

Modelo dinámico

El motor de modelos dinámicos es el núcleo de la plataforma low-code de Doggy. Mediante la anotación @Ef combinada con los Attributes de PHP 8 para marcar los campos de negocio, genera automáticamente migraciones de base de datos, API y la interfaz de administración.

Descripción general

El sistema de modelos dinámicos se basa en dos anotaciones principales:

  • Ef: agrupa los campos de negocio y marca sus metadatos
  • EfGroup: define los grupos de campos

Las anotaciones se definen en src/Annotation/Ef.php y 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;
    }
}

Definir un modelo

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: 'Nombre del departamento', required: true)]
    #[ORM\Column(length: 100)]
    private string $name;

    #[Ef(displayName: 'Código del departamento', searchable: true)]
    #[ORM\Column(length: 50, nullable: true)]
    private ?string $code = null;
}

Gestión de entidades

Las entidades pueden verse y gestionarse en el panel de administración en Plataforma low-code → Gestión de entidades (App\Controller\Admin\Platform\EntityController):

Directorios principales de entidades

DirectorioEntidadesDescripción
Entity/Organization/Department, Company, Corporation, Employee, Position, PositionLevelEstructura organizativa y empleados
Entity/Platform/Entity, EntityProperty, View, ViewField, DataGrid, Menu, DataSourceMotor low-code
Entity/Security/PasswordPolicy, PasswordStrengthRule, PasswordResetMethod, WebauthnCredentialSistema de seguridad
Entity/Storage/File, StorageConfig, UploadSessionAlmacenamiento de archivos
Entity/System/AuditLog, Task, TaskLog, EmailConfig, EmailTemplate, EmailLog, SystemCalendarEventInfraestructura

CommonTrait

Todas las entidades combinan las siguientes capacidades mediante CommonTrait (src/Entity/CommonTrait.php):

php
trait CommonTrait
{
    use SoftDeleteableEntity;    // Borrado suave (campo deletedAt)
    use TimestampableEntity;     // Marcas de tiempo (createdAt, updatedAt)
    use BlameableEntity;        // Autor de la operación (createdBy, updatedBy)

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

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

Generación automática

Después de definir el modelo, comandos como EfInitEntityCommand procesan automáticamente:

  • Generación de archivos de migración de base de datos
  • Renderizado de la interfaz CRUD
  • Reglas de validación de datos
  • Comprobaciones de permisos

Panel de administración

En Plataforma low-code → Gestión de entidades (/admin/platform/entity) se pueden realizar operaciones visuales:

  • Edición de propiedades de entidad (EntityProperty)
  • Gestión de grupos de propiedades (EntityPropertyGroup)
  • Generación de migraciones con un clic
  • Configuración de relaciones

Código abierto bajo MIT | Copyright © 2026 Doggy