Introdução
O Doggy Framework é um framework de desenvolvimento low-code empresarial com IA nativa, construído sobre o Symfony 7.4 LTS (suporte de longo prazo até 2029).
Porquê escolher o Doggy?
- IA nativa: integração aprofundada com MCP, Agent e múltiplos modelos (Alibaba Bailian, OpenAI, LM Studio, Ollama, etc.), com sistema de configuração LLM integrado, assistente IA global, aprimoramento de vista IA, assistente de codificação, consulta em linguagem natural, reconhecimento visual e outras capacidades de IA
- Motor low-code: define modelos de negócio com Attributes do PHP 8 e a anotação personalizada
@Ef, gerando automaticamente migrações de base de dados e interfaces de administração - Designer de vistas com IA: layout por arrastar-e-soltar + operação por linguagem natural com IA + subagentes de reconhecimento de intenções para gerar vistas + gestão de múltiplas versões
- Segurança empresarial: início de sessão sem palavra-passe WebAuthn, separação de três responsáveis, políticas de palavras-passe, registo de auditoria em toda a cadeia
- Comunicação em tempo real: push em tempo real baseado em Mercure SSE, Hub integrado no FrankenPHP, sem serviços adicionais
- Alto desempenho: modo Worker do FrankenPHP + compressão zstd/br, arquitetura com prioridade para PostgreSQL
- Ecosystema completo: estrutura organizacional, tarefas agendadas, armazenamento de ficheiros, sistema de email, biblioteca de componentes SunUI, prontos a usar
Stack tecnológica
| Camada | Tecnologia |
|---|---|
| Linguagem | PHP 8.2+ |
| Framework | Symfony 7.4 LTS |
| Runtime | FrankenPHP (modo Worker) via runtime/frankenphp-symfony |
| Base de dados | PostgreSQL 14+ |
| ORM | Doctrine ORM + StofDoctrineExtensionsBundle (Gedmo) |
| Fila de mensagens | Symfony Messenger (Doctrine Transport) |
| Comunicação em tempo real | Mercure SSE (dunglas/mercure) |
| IA | Symfony AI (MCP, Agent, Store, suporte de múltiplas plataformas) |
| Autenticação | WebAuthn (web-auth/webauthn-symfony-bundle) + JWT (firebase/jwt) |
| Armazenamento de ficheiros | League Flysystem (Local / OSS / S3) |
| Frontend | Twig + jQuery + biblioteca de componentes SunUI |
| Bibliotecas de utilidades | PHPSpreadsheet, Imagine, Predis, Ramsey UUID |
Requisitos de sistema
- PHP >= 8.2
- ext-ctype, ext-iconv
- PostgreSQL >= 14
- Composer >= 2.5
Início rápido
Instalação
bash
git clone git@github.com:doggy/skeleton.git my-app
cd my-appConfiguração de ambiente
bash
cp .env.example .env
# Edite o .env para configurar a ligação à base de dados e a chave JWT do MercureIniciar a base de dados
O PostgreSQL precisa de ser instalado e executado em separado:
bash
# macOS
brew install postgresql@14
brew services start postgresql@14
createdb app
# Ubuntu/Debian
sudo apt install postgresql-14
sudo systemctl start postgresql
sudo -u postgres createdb appO Mercure Hub está integrado no FrankenPHP, não sendo necessário iniciá-lo em separado.
Acesso
- Aplicação: http://localhost:8000
- Backoffice: http://localhost:8000/admin
Estrutura de diretórios
config/
├── bundles.php # Lista de Symfony Bundles ativados
├── packages/ # Configuração de cada Bundle
└── services.yaml
src/
├── Annotation/ # Anotações personalizadas: Ef.php, EfGroup.php
├── Command/ # 16 comandos Console
├── Controller/ # Controladores Admin, Api, Security
├── Entity/ # Entidades Doctrine + CommonTrait
│ ├── Organization/ # Department, Position, etc.
│ ├── Platform/ # Entidades relacionadas com a plataforma
│ ├── Security/ # User, Role, Permission
│ ├── Storage/ # Entidades de armazenamento de ficheiros
│ └── System/ # Entidades de configuração de sistema
├── Form/ # Tipos de formulário
├── Message/ # Mensagens assíncronas
├── MessageHandler/ # Processadores de mensagens
├── Repository/ # Repositórios Doctrine
├── Security/ # WebAuthn, JWT, Voter
├── Service/ # AI, Calendar, Security, Storage, Task, View, etc.
└── Twig/ # TwigExtension
Caddyfile # Configuração do FrankenPHP (Hub Mercure, compressão, cache)Bundles centrais ativados
| Bundle | Função |
|---|---|
| FrameworkBundle | Núcleo do Symfony |
| DoctrineBundle + MigrationsBundle | ORM da base de dados e migrações |
| SecurityBundle | Autenticação e autorização de segurança |
| TwigBundle + TwigExtraBundle | Motor de templates |
| MonologBundle | Registo de logs |
| StofDoctrineExtensionsBundle | Extensões Gedmo (árvore, timestamps, eliminação suave, etc.) |
| NelmioCorsBundle | Suporte CORS |
| WebauthnBundle | Autenticação sem palavra-passe WebAuthn |
| MercureBundle | Push de mensagens em tempo real |
| AiBundle | Integração Symfony AI |
| FlysystemBundle | Abstração de armazenamento de ficheiros |
| HautelookAliceBundle | Fixtures de dados de teste |
Conceitos centrais
Modelo dinâmico
Defina os campos de negócio com a anotação @Ef e os Attributes do PHP 8, e o modelo completa automaticamente:
- Geração de migrações de base de dados
- Renderização de interfaces CRUD
- Regras de validação de dados
- Verificações de permissões
php
use App\Annotation\Ef;
class Department
{
#[Ef(displayName: '部门名称', required: true)]
private string $name;
#[Ef(displayName: '部门编码', searchable: true)]
private string $code;
}Consulte: Modelo dinâmico
Trait comum de entidades
Todas as entidades combinam as seguintes capacidades através do CommonTrait:
CommonTrait
├── BlameableTrait # Registo automático de quem criou/atualizou
├── TimestampableTrait # Registo automático de datas de criação/atualização
├── SoftDeleteTrait # Eliminação suave
└── IdTrait # Chave primária auto-incrementadaEstrutura organizacional
Árvore de departamentos multi-nível (Nested Set), gestão de empregados e sistema de posições, com suporte para:
- Árvore de departamentos com profundidade ilimitada (Gedmo NestedTree)
- Atribuição a múltiplas empresas e departamentos
- Sistema de posições e níveis
- Importação/exportação em massa de utilizadores (PHPSpreadsheet)
Consulte: Estrutura organizacional
Sistema de segurança
- Início de sessão sem palavra-passe WebAuthn (suporta Passkey, chave de segurança, biometria)
- Separação de três responsáveis (administrador de sistema, administrador de segurança, administrador de auditoria)
- Políticas de complexidade e validade de palavras-passe
- Auditoria de operações em toda a cadeia
Consulte: Autenticação WebAuthn