MadMessage
Modal de erro/info (info/success/warning/error) e ponto de entrada de MadConfirm.
Mad\Ui\MadMessage é a factory para diálogos modais informativos
(info/success/warning/error) e o ponto
de entrada para diálogos de confirmação com botões customizados
(MadConfirm).
Por baixo dos panos, ambos usam o mesmo sistema de diálogo do client:
MadDialog (JS puro, sem dependência externa).
API — mensagens informativas
Cada método monta um MadResponse já com a op script que dispara
MadDialog.show(...) no client — sempre com um único botão "OK", já que o
objetivo é uma mensagem que o usuário precisa reconhecer (diferente do toast, que some
sozinho):
use Mad\Ui\MadMessage;
return MadMessage::success('Salvo!', 'Registro salvo com sucesso.');
return MadMessage::warning('Atenção', 'Verifique os campos antes de continuar.');
return MadMessage::error('Erro ao salvar', 'Não foi possível conectar ao banco.');
return MadMessage::info('Dica', 'Use Ctrl+S para salvar rapidamente.', 'lightbulb');
| Método | Assinatura | Cor/ícone padrão |
|---|---|---|
info($title, $content, $icon = '') | static MadResponse | Azul — info |
success($title, $content, $icon = '') | static MadResponse | Verde — check-circle |
warning($title, $content, $icon = '') | static MadResponse | Laranja — alert-triangle |
error($title, $content, $icon = '') | static MadResponse | Vermelho — x-circle |
$content permite HTML — é injetado direto no corpo do diálogo (sem
htmlspecialchars), então sanitize qualquer dado vindo do usuário antes de
passar para cá. O terceiro argumento $icon sobrescreve o ícone
Lucide padrão do tipo — quando vazio a chave icon nem entra no payload e o
MadDialog aplica o ícone default do type.
Uso típico — dentro de um catch
use Mad\Ui\MadMessage;
use Mad\Http\MadResponse;
public function onSave(): MadResponse
{
try {
DB::connection('business')->transaction(function () {
$pedido = Pedido::findOrNew($this->registroId);
$this->form->save($pedido);
});
return MadToast::success('Salvo!')->closeDrawer();
} catch (\Throwable $e) {
return MadMessage::error('Erro ao salvar', $e->getMessage());
}
}
Encadeamento
Como retorna MadResponse, o retorno encadeia normalmente com outras ops:
// MadMessage::*() retorna MadResponse — encadeável com qualquer outra op
return MadMessage::error('Sem permissão', 'Você não pode editar este registro.')
->script("setTimeout(() => window.location.href = '/login', 3000)");
Confirmação com ação — MadMessage::confirm()
Quando o diálogo precisa de mais de um botão (confirmar/cancelar, ou múltiplas ações),
confirm($title, $content, $component, $icon = '') NÃO retorna
MadResponse — retorna um builder fluente,
MadConfirm,
que você encadeia e finaliza com build():
use Mad\Ui\MadMessage;
// confirm() NÃO retorna MadResponse direto — retorna um builder MadConfirm.
// Encadeie onConfirm()/button()/onCancel() e finalize com build().
return MadMessage::confirm('Excluir', 'Confirmar exclusão do registro #42?', $this)
->onConfirm('deletar', [42])
->onCancel()
->build();
O terceiro parâmetro ($component) é o MadComponent (normalmente
$this) ou o mad-id em string cujos métodos os botões vão chamar via
MadWire.call() no client. Ver a API completa de botões em
MadConfirm.
Toast vs MadMessage vs MadConfirm
| Situação | Use |
|---|---|
| Confirmação rápida de sucesso (não bloqueante) | MadToast::success() |
| Aviso importante mas não bloqueante | MadToast::warning() |
| Erro de validação por campo | MadValidationException::asModal() |
| Erro fatal (banco, rede, exceção não tratada) que exige reconhecimento | MadMessage::error() |
| Confirmação com uma única ação destrutiva (excluir, cancelar) | MadMessage::confirm(...)->onConfirm(...)->onCancel()->build() |
| Confirmação com múltiplas ações (aprovar / rejeitar / salvar rascunho) | MadMessage::confirm(...)->button(...)->button(...)->build() |
Não use echo/print nem monte o script() de
MadDialog.show(...) manualmente — MadMessage já cuida do
JSON-encode seguro do título/mensagem. Construir a chamada à mão é fácil de quebrar
com aspas/HTML não escapados.