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.
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!')