Prólogo
Visão geral do MAD framework e seus pilares.
O MAD Framework é um conjunto de ferramentas para construir aplicações
PHP server-rendered ricas: sistemas ERP, portais públicos, blogs, sites institucionais
e APIs REST. É distribuído como package Composer (mad/framework)
sobre Laravel — sem framework legado por baixo — e adiciona componentes
Blade reativos, ORM 100% Eloquent, geração de PDF, calendário, kanban e muito mais.
Produtividade primeiro. O MAD reduz CRUD repetitivo a poucas linhas declarativas. Listagens, formulários, dashboards e integrações que normalmente exigem centenas de linhas de JavaScript saem prontos com tags
<mad-*>.Sem build step nos componentes. Os mais de 170 componentes
mad-*são PHP + Blade + Alpine.js + Lucide, com JS/CSS já compilados e publicados empublic/lib/mad— usar um componente não exige Node nem passo de build. O shell padrão do projeto (Tailwind) usa Vite, mas isso é independente da biblioteca de componentes em si.
Pilares do MAD
| Pilar | O que é |
|---|---|
| Componentes reativos | 170+ componentes Blade prontos: forms, listas, gráficos, calendário, kanban. Ver Componentes (Admin). |
| Superwidgets de ERP | Telas inteiras num tag só: <mad-sheet> (planilha editável, Mad\Sheet), <mad-pdv> (frente de caixa com pagamento e venda a prazo, Mad\Pdv), <mad-reconcile> (conciliação com MatchEngine, Mad\Reconcile) e <mad-org-chart> (organograma, Mad\OrgChart). |
| ORM 100% Eloquent | Models são Illuminate\Database\Eloquent\Model puro — sem classe base própria. Traits opcionais (HasIdPolicy, HasMadAudit, HasMadSoftDeletes) cobrem o que o framework acrescenta. Ver Banco de dados. |
| MadWire (reatividade) | Reatividade server-side estilo Livewire: state, actions, partial render. Sem você escrever JS. Ver Reatividade. |
| Forms inteligentes | MadForm com validação, upload, field-list, detail-form e hooks de ciclo. Ver Formulários. |
| Roteamento Laravel nativo | Rotas públicas, REST API, middleware, CSRF e autenticação — padrão familiar do Laravel, sem camada própria de roteamento. Ver Roteamento. |
| PDF nativo | MadDoc gera PDFs (relatórios, etiquetas, contratos) com componentes Blade. Ver Geração de PDF. |
Hello, MAD
Um CRUD básico em duas partes — controller + view:
Controller (app/control/Estoque/ProdutoForm.php):
namespace App\Control\Estoque;
use Mad\Component\MadComponent;
use Mad\Form\MadForm;
use Mad\Http\MadResponse;
use Mad\Ui\MadMessage;
use App\Models\Business\Produto;
class ProdutoForm extends MadComponent
{
protected static string $wrapper = self::DRAWER;
protected static string $title = 'Produto';
public MadForm $form;
public ?int $registroId = null;
public function mount(): void
{
$this->form = new MadForm('form');
}
public function onEdit(int $id): void
{
$produto = Produto::findOrFail($id);
$this->registroId = $produto->id;
$this->form->fill($produto->toArray());
}
public function onSave(): MadResponse
{
try {
$data = $this->form->getData();
$this->form->validate(Produto::rules($this->registroId));
$produto = Produto::findOrNew($this->registroId);
$this->form->save($produto);
return (new MadResponse())
->toast('Salvo!', 'success')
->closeDrawer();
} catch (\Throwable $e) {
return MadMessage::error('Erro', $e->getMessage());
}
}
protected function view(): string|array
{
return 'business.produto-form';
}
}
View (resources/views/business/produto-form.blade.php):
<mad-form submit="onSave">
<mad-form-section title="Dados do produto" icon="package">
<mad-form-grid :cols="2">
<mad-input-field name="nome" label="Nome" required />
<mad-money-field name="valor" label="Valor" required />
</mad-form-grid>
<mad-textarea-field name="descricao" label="Descrição" />
<mad-image-field name="foto" label="Foto"
storage="disk" folder="uploads/produtos" />
</mad-form-section>
<mad-form-actions>
<mad-btn type="submit" variant="primary" icon="save">Salvar</mad-btn>
</mad-form-actions>
</mad-form>
Esse formulário automaticamente: valida campos via Produto::rules(),
salva a foto no disco com nome único, persiste o registro via Eloquent
($produto->save(), chamado por dentro de $this->form->save()),
mostra toast de sucesso e fecha o drawer. Sem código JavaScript. Sem AJAX manual.
Filosofia
O MAD privilegia convenção sobre configuração e declaração
sobre imperativismo. Você descreve o que quer via tags
<mad-*> e props PHP — o framework cuida da implementação.
Server-first, mas reativo. Diferente de SPAs, no MAD a verdade do estado vive no servidor. Mudanças de input chegam ao backend via
mad:model, ações disparam métodos PHP viamad:click, e a UI é atualizada por re-render parcial — tudo sem você escrever uma linha de JavaScript.
O que vem em seguida
- Instalação — Composer, dependências, primeira execução.
- Configuração —
.env,config/mad.php, conexões, permissões. - Estrutura do projeto — diretórios principais e onde colocar cada coisa.
- CRUD completo — uma tela end-to-end em 5 minutos.