Saltar al contenido principal

Radio

Introducción

El input de tipo radio proporciona un grupo de botones para seleccionar un único valor de una lista de opciones predefinidas:

use Filament\Forms\Components\Radio;

Radio::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published'
])
Inyección de utilidades

Además de permitir un array estático, el método options() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Establecer descripciones de opciones

Opcionalmente puedes proporcionar descripciones para cada opción usando el método descriptions():

use Filament\Forms\Components\Radio;

Radio::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published'
])
->descriptions([
'draft' => 'Is not visible.',
'scheduled' => 'Will be visible.',
'published' => 'Is visible.'
])
Inyección de utilidades

Además de permitir un array estático, el método descriptions() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

info

Asegúrate de usar la misma key en el array de descripciones que la key en el array de opciones para que la descripción correcta coincida con la opción correcta.

Colocar las opciones en línea entre sí

Puedes querer mostrar las opciones inline() entre sí:

use Filament\Forms\Components\Radio;

Radio::make('feedback')
->label('Like this post?')
->boolean()
->inline()

Opcionalmente, puedes pasar un valor booleano para controlar si las opciones deben estar en línea o no:

use Filament\Forms\Components\Radio;

Radio::make('feedback')
->label('Like this post?')
->boolean()
->inline(FeatureFlag::active())
Inyección de utilidades

Además de permitir un valor estático, el método inline() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Deshabilitar opciones específicas

Puedes deshabilitar opciones específicas usando el método disableOptionWhen(). Acepta un closure, en el cual puedes comprobar si la opción con un $value específico debe estar deshabilitada:

use Filament\Forms\Components\Radio;

Radio::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published',
])
->disableOptionWhen(fn (string $value): bool => $value === 'published')
Inyección de utilidades

Puedes inyectar varias utilidades en la función como parámetros.

Parámetros adicionales disponibles:
  • Valor de opción (mixed $value) - El valor de la opción a deshabilitar.
  • Etiqueta de opción (string | Illuminate\Contracts\Support\Htmlable $label) - La etiqueta de la opción a deshabilitar.

Si quieres recuperar las opciones que no han sido deshabilitadas, p. ej., para propósitos de validación, puedes hacerlo usando getEnabledOptions():

use Filament\Forms\Components\Radio;

Radio::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published',
])
->disableOptionWhen(fn (string $value): bool => $value === 'published')
->in(fn (Radio $component): array => array_keys($component->getEnabledOptions()))

Para más información sobre la función in(), por favor consulta la documentación de Validación.

Opciones booleanas

Si quieres un grupo de botones radio booleano simple, con opciones "Yes" y "No", puedes usar el método boolean():

use Filament\Forms\Components\Radio;

Radio::make('feedback')
->label('Like this post?')
->boolean()

Para personalizar la etiqueta de "Yes", puedes usar el argumento trueLabel en el método boolean():

use Filament\Forms\Components\Radio;

Radio::make('feedback')
->label('Like this post?')
->boolean(trueLabel: 'Absolutely!')

Para personalizar la etiqueta de "No", puedes usar el argumento falseLabel en el método boolean():

use Filament\Forms\Components\Radio;

Radio::make('feedback')
->label('Like this post?')
->boolean(falseLabel: 'Not at all!')