Campos de formulário
mad-avatar-field
mad-image-field
mad-signature-field
mad-html-editor-field
Avatar
mad-avatar-field: foto de perfil compacta, em círculo.
Foto de perfil
PNG ou JPEG · máx. 2MB
resources/views/tutor/examples/forms-midia/avatar.blade.php
<mad-avatar-field name="foto_perfil" label="Foto de perfil"
storage="disk" folder="uploads/tutor-midia" name-column="foto_perfil_nome"
size="96px" accept="image/png,image/jpeg" maxSize="2MB"
hint="Círculo compacto para foto de perfil. Atenção: aqui o prop de tamanho máximo é maxSize (camelCase) — file/image/multi-file usam grafias diferentes (ver página Uploads)." />
Imagem
mad-image-field com crop/rotate/zoom (Cropper.js) e proporção fixa.
Arraste uma imagem
ou clique para selecionar
ou clique para selecionar
IMAGE/PNG, IMAGE/JPEG • Máx 5MB
Cropper.js embutido (crop/rotate/zoom). Atenção: aspect_ratio e max_size usam UNDERSCORE — a forma kebab (aspect-ratio) não é lida pelo componente.
resources/views/tutor/examples/forms-midia/imagem.blade.php
<mad-image-field name="foto_capa" label="Foto de capa"
storage="disk" folder="uploads/tutor-midia" name-column="foto_capa_nome"
crop aspect_ratio="16:9" width="320px" height="180px"
accept="image/png,image/jpeg" max_size="5MB"
hint="Cropper.js embutido (crop/rotate/zoom). Atenção: aspect_ratio e max_size usam UNDERSCORE — a forma kebab (aspect-ratio) não é lida pelo componente." />
Assinatura
mad-signature-field: desenhar com o mouse/dedo ou digitar em cursiva.
Dancing Script
Great Vibes
Courier Prime
Clique para assinar
Assinatura
modes=draw,type habilita desenhar (mouse/dedo) ou digitar em cursiva — omita 'upload' pra não aceitar imagem pronta.
resources/views/tutor/examples/forms-midia/assinatura.blade.php
<mad-signature-field name="assinatura_demo" label="Assinatura"
modes="draw,type" pen-color="#1d4ed8"
storage="disk" folder="uploads/tutor-midia" name-column="assinatura_demo_nome"
hint="modes=draw,type habilita desenhar (mouse/dedo) ou digitar em cursiva — omita 'upload' pra não aceitar imagem pronta." />
Editor HTML
mad-html-editor-field: rich text (negrito, listas, links) salvo como HTML.
Editor rico (negrito, listas, links) — o valor salvo é HTML puro.
resources/views/tutor/examples/forms-midia/editor-html.blade.php
<mad-html-editor-field name="conteudo_demo" label="Conteúdo" :height="220"
placeholder="Escreva algo..."
hint="Editor rico (negrito, listas, links) — o valor salvo é HTML puro." />
Ação wire
mad-form com submit real — dispara TutorFormsMidia::onSubmitDemo.
resources/views/tutor/examples/forms-midia/wire-submit.blade.php
<mad-form submit="onSubmitDemo">
<mad-html-editor-field name="bio_wire" label="Bio" :height="160"
placeholder="Fale um pouco sobre você..." />
<mad-form-actions align="right">
<mad-btn type="submit" variant="primary" icon="send">Enviar (onSubmitDemo)</mad-btn>
</mad-form-actions>
</mad-form>
app/control/Tutor/TutorFormsMidia.php
/**
* Submit do exemplo "Ação wire" — mad-html-editor-field é o único campo
* desta página com valor de texto simples em getData() (avatar/imagem/
* assinatura são campos de arquivo — não passam por getData(); ver
* página Uploads para o padrão de leitura de arquivo cru).
*/
public function onSubmitDemo(): MadResponse
{
$data = $this->form->getData();
$texto = trim(strip_tags((string) ($data->bio_wire ?? '')));
$chars = mb_strlen($texto);
$preview = $chars > 0 ? mb_substr($texto, 0, 80) : '(vazio)';
return (new MadResponse())
->toast("Conteúdo recebido ({$chars} caracteres): {$preview}", 'success', 'onSubmitDemo');
}
Código-fonte completo da página
app/control/Tutor/TutorFormsMidia.php
<?php
namespace App\Control\Tutor;
use App\Support\Tutor\TutorPage;
use Mad\Form\MadForm;
use Mad\Http\MadResponse;
/**
* TutorFormsMidia — página "Mídia" do catálogo (grupo forms).
*
* Cobre os 4 campos de mídia do catálogo: mad-avatar-field, mad-image-field,
* mad-signature-field e mad-html-editor-field.
*/
class TutorFormsMidia extends TutorPage
{
protected string $catalogKey = 'forms_midia';
public MadForm $form;
public function mount(array $params = []): void
{
$this->form = new MadForm('tutor_forms_midia');
}
/**
* Submit do exemplo "Ação wire" — mad-html-editor-field é o único campo
* desta página com valor de texto simples em getData() (avatar/imagem/
* assinatura são campos de arquivo — não passam por getData(); ver
* página Uploads para o padrão de leitura de arquivo cru).
*/
public function onSubmitDemo(): MadResponse
{
$data = $this->form->getData();
$texto = trim(strip_tags((string) ($data->bio_wire ?? '')));
$chars = mb_strlen($texto);
$preview = $chars > 0 ? mb_substr($texto, 0, 80) : '(vazio)';
return (new MadResponse())
->toast("Conteúdo recebido ({$chars} caracteres): {$preview}", 'success', 'onSubmitDemo');
}
}
resources/views/tutor/forms/midia.blade.php
<x-tutor-page page="forms_midia">
<x-tutor-demo demo="tutor.examples.forms-midia.avatar"
title="Avatar" desc="mad-avatar-field: foto de perfil compacta, em círculo." />
<x-tutor-demo demo="tutor.examples.forms-midia.imagem"
title="Imagem" desc="mad-image-field com crop/rotate/zoom (Cropper.js) e proporção fixa." />
<x-tutor-demo demo="tutor.examples.forms-midia.assinatura"
title="Assinatura" desc="mad-signature-field: desenhar com o mouse/dedo ou digitar em cursiva." />
<x-tutor-demo demo="tutor.examples.forms-midia.editor-html"
title="Editor HTML" desc="mad-html-editor-field: rich text (negrito, listas, links) salvo como HTML." />
<x-tutor-demo demo="tutor.examples.forms-midia.wire-submit"
title="Ação wire" desc="mad-form com submit real — dispara TutorFormsMidia::onSubmitDemo."
php="TutorFormsMidia::onSubmitDemo" />
</x-tutor-page>