AutocompleteList
Class: Code16\Sharp\Form\Fields\SharpFormAutocompleteListField
This one is seems a little strange. The goal is to build a List with only one field in each item, an Autocomplete.
First let's see a use case: imagine you want to handle a list of winners
by selecting them in a big list of Players, for which an remote Autocomplete is the best choice (otherwise you could have opted for a Tags Field).
You can in fact define the list as this:
SharpFormAutocompleteListField::make("winners")
->setLabel("Winners")
->setItemField(
SharpFormAutocompleteField::make("item", "remote")
->setRemoteEndpoint("/players")
[...]
)
);
TIP
The key of the Autocomplete, item
here, could be anything you want, as soon you stay consistent in the buildFormLayout()
part.
But why can't we use a classic List for this? Well, the model->winners
relation is N-N, here (belongsToMany
), but Lists are meant to handle 1-N relationships (hasMany
). Here we want one field, the Autocomplete, to represent the whole item object.
Configuration
Configuration is the same as the classic List, except for:
setItemField(SharpFormAutocompleteField $field)
You can use this function instead of addItemField
, since items of AutocompleteList have only one field.
addItemField(SharpFormField $field)
This method is an alias for setItemField()
, meaning that you can only pass an Autocomplete, and it can only be called once.
Formatter
toFront
Well, you must provide an array or Collection (same as for a List, see related documentation) of models with at least attributes designated by templates for the Autocomplete (see related documentation).
formFront
Returns the selected item id.