Docs›Componentes (Admin)›mad-radio-field
Componentes (Admin)

mad-radio-field

Grupo de radio buttons com options manuais.

Grupo de radio buttons (escolher 1 entre N) com options fixas/manuais. Integra com MadForm (auto mad:model), MadFormRegistry e MadRenderContext (preenchimento automático via form->fill() / form->set()).

CRÍTICO: o tema aplica appearance:none em todos input[type=radio]. NUNCA criar radio buttons nativos via @foreach — sempre usar este componente.

Para options vindas do banco, use <mad-dbradio-field> (mesma renderização, auto-load via Eloquent).

Props

Prop Tipo Default Descrição
name string '' Nome do campo (obrigatório)
label string '' Label do grupo
options array [] ['val' => 'Label'] ou [['value','label','disabled','description']]
selected string auto Valor selecionado (auto via MadRenderContext quando omitido)
inline bool false Layout horizontal (default: vertical)
break-items int 0 Quebra linha a cada N items (só com inline, não se aplica em as=button)
as string '' '' (radio circular padrão) ou button (segmented btn-group)
boolean bool false Atalho Sim/Não — gera options 1=Sim, 2=Nao, ativa as=button + inline
size string '' '' (normal), sm, lg
width / max-width string '' Largura / largura máxima do wrapper (CSS: px, %, calc())
hint string '' Texto de ajuda
error string '' Mensagem de erro
required bool false Campo obrigatório
disabled bool false Desabilita todos os radios do grupo
attrs string '' Atributos HTML extras (mad:change="...", etc) — aplicados em cada <input>
style string '' Estilo inline no wrapper

Estado vem automaticamente do MadRenderContext (form->fill($record) pré-seleciona).

Uso básico

@php $tipos = ['F' => 'Pessoa Fisica', 'J' => 'Pessoa Juridica']; @endphp

<mad-radio-field name="tipo" label="Tipo" :options="$tipos" inline required />

Variante button (segmented btn-group)

Visual mais compacto, ideal para toggles de status/modo:

<mad-radio-field name="periodo" label="Periodo" as="button"
    :options="['dia' => 'Dia', 'sem' => 'Semana', 'mes' => 'Mes', 'ano' => 'Ano']" />

Modo boolean (atalho Sim/Não)

<mad-radio-field name="ativo" label="Ativo" boolean />
{{-- Equivale a: as=button, inline=true, options=['1' => 'Sim', '2' => 'Nao'] --}}

Tamanhos

<mad-radio-field name="x" :options="$opts" size="sm" />
<mad-radio-field name="x" :options="$opts" size="lg" as="button" />

Quebra a cada N items (inline)

<mad-radio-field name="cor" :options="$cores" inline :break-items="4" />
{{-- 4 items por linha --}}

Com descrição por opção

@php
    $planos = [
        ['value' => 'basic', 'label' => 'Basico', 'description' => 'Ate 5 usuarios'],
        ['value' => 'pro',   'label' => 'Pro',    'description' => 'Usuarios ilimitados'],
        ['value' => 'ent',   'label' => 'Enterprise', 'description' => 'SLA dedicado', 'disabled' => true],
    ];
@endphp
<mad-radio-field name="plano" label="Plano" :options="$planos" />

Com mad:change (ação no servidor)

<mad-radio-field name="tipo" :options="$tipos" inline
    attrs='mad:change="onTipoChange"' />

Reload remoto via PHP

$this->form->setItems('tipo', ['F' => 'Fisica', 'J' => 'Juridica'], 'F');
// Gera op reload_radio — preserva variant button automaticamente

Dentro de formulário

<mad-form submit="onSave">
    <mad-form-grid :cols="2">
        <mad-input-field name="nome" label="Nome" required />
        <mad-radio-field name="tipo" label="Tipo" :options="$tipos" inline required />
    </mad-form-grid>
    <mad-btn type="submit" variant="primary" icon="save">Salvar</mad-btn>
</mad-form>

Quando usar radio-field vs alternativas

Preciso... Usar
Escolher 1 entre N, options fixas/manuais <mad-radio-field>
Escolher 1 entre N, options vindas do banco <mad-dbradio-field>
Escolher 1 entre N com busca/dropdown (lista grande) <mad-dbcombo-field>
Sim/Não compacto <mad-radio-field boolean> ou <mad-switch-field>
Booleano simples num form denso <mad-checkbox-field>
Escolher N entre N (múltipla seleção) <mad-checkbox-group-field>

NUNCA fazer

{{-- ERRADO: gerar radio buttons com @foreach manual --}}
@foreach($tipos as $v => $l)
    <label><input type="radio" name="tipo" value="{{ $v }}"> {{ $l }}</label>
@endforeach

{{-- CERTO --}}
<mad-radio-field name="tipo" :options="$tipos" />

{{-- ERRADO: carregar options do banco no controller pra passar pro radio-field --}}
@php $tipos = TipoProduto::pluck('descricao', 'id')->all(); @endphp
<mad-radio-field name="tipo_id" :options="$tipos" />

{{-- CERTO: dbradio-field carrega sozinho --}}
<mad-dbradio-field name="tipo_id" model="TipoProduto" display="descricao" />

{{-- ERRADO: usar radio-field pra lista grande/dinamica (sem busca, sem paginacao) --}}
<mad-radio-field name="cliente_id" :options="$milhoesDeClientes" />

{{-- CERTO: lista grande pede busca AJAX --}}
<mad-dbunique-search-field name="cliente_id" model="Pessoa" display="nome" />

{{-- ERRADO: passar break-items sem inline (nao faz nada) --}}
<mad-radio-field name="cor" :options="$cores" :break-items="4" />

{{-- CERTO: break-items so funciona com inline --}}
<mad-radio-field name="cor" :options="$cores" inline :break-items="4" />