Custom field attributes
Some custom fields does not have these methods, like SpatieTags
, FileUpload
and Trix
, as it could break their functionality.
//Field attribute methods and which config value they correspond to
rootAttr(array $attributes, bool $mergeClasses = true) //field-attribute['root']
beforeAttr(array $attributes, bool $mergeClasses = true) //field-attribute['before']
beforeTextAttr(array $attributes, bool $mergeClasses = true) //field-attribute['before-text']
aboveAttr(array $attributes, bool $mergeClasses = true) //field-attribute['above']
belowAttr(array $attributes, bool $mergeClasses = true) //field-attribute['below']
belowWrapperAttr(array $attributes, bool $mergeClasses = true) //field-attribute['below-wrapper']
afterTextAttr(array $attributes, bool $mergeClasses = true) //field-attribute['after-text']
afterLabelAttr(array $attributes, bool $mergeClasses = true) //field-attribute['after-label']
//custom input attribute
inputAttr(array $attributes) //no value in config
inputAttr(array $attributes)
Do NOT set any
wire:model...
, use the field->wire()
method instead. Otherwise, it will be applied twice.Overrides the
field-attribute['input']
in the config file
Merge with config, example
Input::make('Name')->labelAttr('bg-green-300') //merge with config
Input::make('Name')->labelAttr('bg-green-300', false) //replace config
Alpine Js example
This is a somewhat ridiculous example just to show the power you have with the inputAttr()
.
In this example Livewire sets the initial value to 3
, then Alpine sets it to 2
, and finally Alpine sets it to 10
, when the component has finished mounting.
Input::make('Integer')
->custom()//see Manually saving data
->type('number')->step(1)->min(1)->max(100)
->default(3)
->wire('wire:model.defer')//Livewire will not care about this field until form is submitted
->inputAttr([
'x-data' => "{ count: 2 }",
'x-model' => "count",
'x-init' => "() => { count = 10 }",
'class' => "form-input bg-green-500" //replaces any value from config file
]),
Input pattern format, example
Input::make('Phone')
->type('tel')
->prefix('phone:')
->above('Example input with inputAttr() maxlength and size')
->inputAttr([
'pattern' => "[0-9]{12}",
'maxlength' => 12
])
->placeholder('### ### ### ###')
->rules('required')
//Do not forget to add a pseudo class, input:invalid { border: red solid 3px; } or similar to your app.css.
//If you want to take full advantage of the html5 pattern attribute
Another Alpine Js example
You can use the methods mentioned on the Styling page to set attributes on other elements.
See another example on the Form Slots page.
Input::make('Name')
->rootAttr([
'x-data' => "{ foo: 'bar'}",
'class' => 'border rounded',
])
->inputAttr([
'x-init' => "foo = 'baz'"
])
->required(),
Last updated
Was this helpful?