Skip to content

Modelo dinâmico

O motor de modelo dinâmico é o núcleo da plataforma low-code do Doggy. Através da anotação @Ef combinada com os Attributes do PHP 8, marca os campos de negócio e gera automaticamente migrações de base de dados, APIs e interface de administração.

Visão geral

O sistema de modelo dinâmico é construído sobre duas anotações centrais:

  • Ef: marca os atributos de metadados e agrupamento dos campos de negócio
  • EfGroup: define agrupamentos de campos

As anotações estão definidas em src/Annotation/Ef.php e 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 um 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: '部门名称', required: true)]
    #[ORM\Column(length: 100)]
    private string $name;

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

Gestão de entidades

As entidades podem ser consultadas e geridas no backoffice, em Plataforma low-code → Gestão de entidades (App\Controller\Admin\Platform\EntityController):

Principais diretórios de entidades

DiretórioEntidadesDescrição
Entity/Organization/Department, Company, Corporation, Employee, Position, PositionLevelEstrutura organizacional e empregados
Entity/Platform/Entity, EntityProperty, View, ViewField, DataGrid, Menu, DataSourceMotor low-code
Entity/Security/PasswordPolicy, PasswordStrengthRule, PasswordResetMethod, WebauthnCredentialSistema de segurança
Entity/Storage/File, StorageConfig, UploadSessionArmazenamento de ficheiros
Entity/System/AuditLog, Task, TaskLog, EmailConfig, EmailTemplate, EmailLog, SystemCalendarEventInfraestrutura

CommonTrait

Todas as entidades combinam as seguintes capacidades através do CommonTrait (src/Entity/CommonTrait.php):

php
trait CommonTrait
{
    use SoftDeleteableEntity;    // eliminação suave (campo deletedAt)
    use TimestampableEntity;     // timestamps (createdAt, updatedAt)
    use BlameableEntity;        // autor da operação (createdBy, updatedBy)

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

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

Geração automática

Após definir o modelo, comandos como EfInitEntityCommand tratam automaticamente de:

  • Geração de ficheiros de migração de base de dados
  • Renderização de interfaces CRUD
  • Regras de validação de dados
  • Verificações de permissões

Backoffice

Em Plataforma low-code → Gestão de entidades (/admin/platform/entity) pode realizar operações visuais:

  • Edição de propriedades de entidade (EntityProperty)
  • Gestão de agrupamentos de propriedades (EntityPropertyGroup)
  • Geração de migrações com um clique
  • Configuração de relações

Código aberto sob MIT | Copyright © 2026 Doggy