Docs›Começando›Prólogo
Começando

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 em public/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

PilarO 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 via mad:click, e a UI é atualizada por re-render parcial — tudo sem você escrever uma linha de JavaScript.

O que vem em seguida