Docs›Componentes (Admin)›mad-checkbox-group-field
Componentes (Admin)

mad-checkbox-group-field

Grupo de checkboxes (manual).

Grupo de checkboxes com options manuais (name[]). Integra com MadForm/MadRenderContext — form->fill() pré-marca os selecionados, form->save() persiste.

Quando as options vêm do banco (em vez de um array fixo no Blade/controller), use <mad-dbcheckbox-group-field> — mesma API visual, carregamento automático via model Eloquent e suporte a persistência em pivot.

Props

Prop Tipo Default Descrição
name string '' Nome do campo (envia como name[])
label string '' Label do grupo
options array [] ['val' => 'Label', ...]
selected array|string [] Selecionados (array ou CSV). Auto-resolvido via MadRenderContext quando omitido
items array — Alias de options (nome gravado pelo editor visual)
layout string 'vertical' vertical ou horizontal
as string '' button = variante segmentada (botões em vez de caixinhas)
size string '' sm, '' (normal), lg
break-items int 0 Quebra a linha a cada N itens (só com layout="horizontal" e sem as="button")
mode string 'comma' comma (CSV numa coluna) ou table (pivot 1:N)
pivot-model string '' Model da tabela pivot (mode="table")
foreign-key string '' Coluna FK do registro pai na pivot (mode="table")
item-key string '' Coluna do item selecionado na pivot (mode="table")
database string MAIN_DATABASE ou business Conexão usada na pivot
separator string ',' Separador quando selected vem como string
width string '' Largura inline do wrapper
max-width string '' Largura máxima inline do wrapper
hint string '' Texto de ajuda
error string '' Mensagem de erro
required bool false
disabled bool false

Uso básico

@php
    $perms = ['read' => 'Ler', 'write' => 'Escrever', 'delete' => 'Excluir'];
@endphp

<mad-checkbox-group-field name="permissoes" label="Permissões"
    :options="$perms" :selected="['read','write']" layout="horizontal" />

form->save($record) grava $record->permissoes como CSV: 'read,write'.

Layout vertical (padrão)

<mad-checkbox-group-field name="dias" label="Dias da semana"
    :options="['seg' => 'Segunda', 'ter' => 'Terça', 'qua' => 'Quarta']" />

Variante segmentada (as="button")

Troca as caixinhas por botões unidos — útil para filtros e seleção compacta:

<mad-checkbox-group-field name="canais" label="Canais"
    :options="['web' => 'Web', 'app' => 'App', 'loja' => 'Loja']"
    as="button" size="sm" layout="horizontal" />

A classe base mad-checkbox-group permanece no container em todas as variantes (o op reload_checkbox_group e a coleta de valores do MadWire dependem dela) — as/size são apenas modificadores.

Quebra a cada N itens (break-items)

<mad-checkbox-group-field name="dias" label="Dias"
    :options="$dias" layout="horizontal" :break-items="4" />

Só tem efeito com layout="horizontal" e sem as="button" (o segmentado é uma peça visual única).

Persistência em pivot (mode="table")

Quando as seleções vivem numa tabela de ligação (1:N) em vez de uma coluna CSV:

<mad-checkbox-group-field name="grupos" label="Grupos"
    :options="$grupos"
    mode="table" pivot-model="IamUserGroup"
    foreign-key="user_id" item-key="group_id" database="iam" />

Com mode="table", os selecionados são carregados sozinhos da pivot no render (quando selected não é informado) e form->save() sincroniza as linhas.

Selected vindo como string (CSV)

Útil quando o valor já vem do banco como string concatenada (em vez de array):

<mad-checkbox-group-field name="tags" label="Tags"
    :options="['promo' => 'Promoção', 'novo' => 'Novidade', 'destaque' => 'Destaque']"
    selected="promo,destaque" separator="," />

Dentro de formulário

<mad-form submit="onSave">
    <mad-input-field name="nome" label="Nome do cargo" required />
    <mad-checkbox-group-field name="permissoes" label="Permissões"
        :options="['read' => 'Ler', 'write' => 'Escrever', 'delete' => 'Excluir']"
        layout="horizontal" required />
    <mad-btn type="submit" variant="primary" icon="save">Salvar</mad-btn>
</mad-form>

Quando usar checkbox-group vs outras opções

Preciso... Usar
Booleano simples (sim/não, ativo) <mad-checkbox-field>
Escolher 1 entre N (options fixas) <mad-radio-field>
Escolher N entre N (options manuais, fixas no Blade/controller) <mad-checkbox-group-field>
Escolher N entre N (options do banco, salva CSV ou pivot 1:N) <mad-dbcheckbox-group-field>
N entre N com múltiplas colunas por item (código, nome, status...) <mad-checklist-field>

NUNCA fazer

{{-- ERRADO: checkbox group manual, um <mad-checkbox-field> por opção --}}
@foreach($perms as $k => $l)
    <mad-checkbox-field :name="$k" :label="$l" />
@endforeach

{{-- CERTO: nome único, envia como array --}}
<mad-checkbox-group-field name="permissoes" :options="$perms" />

{{-- ERRADO: carregar options do banco no controller pra passar pro checkbox-group --}}
@php $cats = \App\Models\Categoria::pluck('nome', 'id')->all(); @endphp
<mad-checkbox-group-field name="cats" :options="$cats" />

{{-- CERTO: dbcheckbox-group-field carrega sozinho --}}
<mad-dbcheckbox-group-field name="cats" model="Categoria" display="nome" />

{{-- ERRADO: reimplementar o grupo com JS próprio (querySelectorAll + array manual) --}}
<script>
document.querySelectorAll('.my-group input[type=checkbox]').forEach(cb => {
    cb.addEventListener('change', () => { /* coletar valores manualmente */ });
});
</script>

{{-- CERTO: o componente já gera "name[]" e integra com MadForm/MadRenderContext --}}
<mad-checkbox-group-field name="opcoes" :options="$opts" />