Tags input
En esta página
import Aside from "@components/Aside.astro" import AutoScreenshot from "@components/AutoScreenshot.astro" import UtilityInjection from "@components/UtilityInjection.astro"
Introduction#
The tags input component allows you to interact with a list of tags.
By default, tags are stored in JSON:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
If you're saving the JSON tags using Eloquent, you should be sure to add an array cast to the model property:
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* @return array<string, string>
*/
protected function casts(): array
{
return [
'tags' => 'array',
];
}
// ...
}
Comma-separated tags#
You may allow the tags to be stored in a separated string, instead of JSON. To set this up, pass the separating character to the separator() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->separator(',')
separator() method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
Autocompleting tag suggestions#
Tags inputs may have autocomplete suggestions. To enable this, pass an array of suggestions to the suggestions() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->suggestions([
'tailwindcss',
'alpinejs',
'laravel',
'livewire',
])
suggestions() method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
Defining split keys#
Split keys allow you to map specific buttons on your user's keyboard to create a new tag. By default, when the user presses "Enter", a new tag is created in the input. You may also define other keys to create new tags, such as "Tab" or " ". To do this, pass an array of keys to the splitKeys() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->splitKeys(['Tab', ' '])
You can read more about possible options for keys.
splitKeys() method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
Adding a prefix and suffix to individual tags#
You can add prefix and suffix to tags without modifying the real state of the field. This can be useful if you need to show presentational formatting to users without saving it. This is done with the tagPrefix() or tagSuffix() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('percentages')
->tagSuffix('%')
tagPrefix() and tagSuffix() methods also accept functions to dynamically calculate them. You can inject various utilities into the functions as parameters.
Reordering tags#
You can allow the user to reorder tags within the field using the reorderable() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->reorderable()
Optionally, you may pass a boolean value to control if the tags should be reorderable or not:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->reorderable(FeatureFlag::active())
reorderable() method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
Changing the color of tags#
You can change the color of the tags by passing a color to the color() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->color('danger')
color() method also accepts a function to dynamically calculate it. You can inject various utilities into the function as parameters.
Trimming whitespace#
You can automatically trim whitespace from the beginning and end of each tag using the trim() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->trim()
You may want to enable trimming globally for all tags inputs, similar to Laravel's TrimStrings middleware. You can do this in a service provider using the configureUsing() method:
use Filament\Forms\Components\TagsInput;
TagsInput::configureUsing(function (TagsInput $component): void {
$component->trim();
});
Tags validation#
You may add validation rules for each tag by passing an array of rules to the nestedRecursiveRules() method:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->nestedRecursiveRules([
'min:3',
'max:255',
])