Formuláře
TextInput
Výchozí pole — text, e-mail, heslo, číslo, telefon nebo URL — s prefixy, maskami a pravidly, která každá varianta implikuje.
Na této stránce
Textové vstupní pole s variantami pro email, heslo, číslo, tel a URL.
use NyonCode\WireForms\Components\TextInput;
Základní použití
TextInput::make('name')TextInput::make('email')->email()TextInput::make('password')->password()TextInput::make('phone')->tel()TextInput::make('website')->url()TextInput::make('quantity')->numeric()TextInput::make('age')->integer()
Varianty typu
| Metoda | HTML typ | Popis |
|---|---|---|
email() |
email |
Nápověda validace emailu |
password() |
password |
Maskovaný input |
tel() |
tel |
Telefonní číslo |
url() |
url |
URL input |
numeric() |
number s inputmode |
Číslo s desetinnou částí |
integer() |
number s inputmode |
Jen celé číslo, step=1 |
search() |
search |
Search input |
type(string) |
Vlastní | Nastavit HTML input typ přímo |
Omezení
TextInput::make('code') ->minLength(3) ->maxLength(10) ->minValue(0) ->maxValue(100) ->step('0.01') ->mask('999-999-999') ->inputMode('numeric') ->autocomplete('off')
Dynamická maska
Vzor, který se mění spolu s hodnotou, se zapisuje jako Alpine výraz, který
vyhodnocuje x-mask:dynamic. Přepočítá se při každém stisku klávesy a má
přednost před mask():
TextInput::make('card') ->dynamicMask("$input.startsWith('34') ? '9999 999999 99999' : '9999 9999 9999 9999'")
Pro částku sáhněte raději po MoneyInput — nastaví stejný druh masky podle měny a napsanou částku přečte zpět jako číslo.
Prázdné hodnoty
Prohlížeč nemá jak odeslat „nic“. Vymazaný <input> dorazí jako prázdný řetězec
a co to má znamenat, závisí čistě na sloupci za ním:
TextInput::make('price')->numeric() // vymazáno -> null, bez ptaníTextInput::make('note') // vymazáno -> '', což je hodnotaTextInput::make('reference')->nullable() // vymazáno -> null, protože sis o to řekl
Číselný input nulluje sám od sebe. '' není číslo: Postgres a MySQL ve
strict módu ho na číselném sloupci odmítnou a SQLite tiše uloží prázdný řetězec
vedle desetinných míst. Neexistuje čtení vymazaného pole type=number, ve kterém
by autor myslel „prázdný řetězec“, takže numeric(), integer() i přímé
type('number') zapíšou null. Nula zůstane nedotčená — 0 je číslo, ne prázdná
hodnota.
Každému jinému typu se to musí říct. Na textovém sloupci je '' naprosto
platná hodnota a NOT NULL sloupec by null napsaný za autora odmítl, takže o něj
říká ->nullable(). Je to stejná metoda se stejným významem jako
TextInputColumn::nullable() v editovatelné
buňce tabulky.
Běží to cestou k záznamu, takže to platí všude, kam hodnota míří — u uloženého
formuláře i u action modalu, který svá data předává
callbacku. Toho, na co je navázaný prohlížeč, se to netýká: pole dál zobrazuje
prázdný input, ne null.
Dekorátory
TextInput::make('price') ->prefix('CZK') ->suffix('.00') ->prefixIcon('currency') ->suffixIcon('calculator')
Affix a hint akce
Umístěte interaktivní Action před/za input nebo vedle hintu. Callback běží na
serveru se stejným reaktivním $get / $set kontextem jako afterStateUpdated()
— použijte ho pro lookupy (ARES, ověření adresy), generování hodnoty z jiného pole nebo
inline akci:
use NyonCode\WireCore\Actions\Action; TextInput::make('company') ->suffixAction( Action::make('lookup') ->icon('heroicon-o-magnifying-glass') ->action(fn ($get, $set) => $set('company', lookupCompany($get('company')))), ) ->hintAction( Action::make('help')->icon('heroicon-o-question-mark-circle'), );
prefixAction(), suffixAction() a hintAction() každá bere Action a sdílejí
state kontext pole. Pro samostatné tlačítko použijte pole Button.
Odhalitelné heslo
TextInput::make('password') ->password() ->revealable() // tlačítko přepnutí viditelnosti
Datalist
TextInput::make('city') ->datalist(['Prague', 'Brno', 'Ostrava'])
Předejte třídu PHP enumu pro použití popisků jeho case jako návrhů (stejné resolvování popisku jako
možnosti Select):
TextInput::make('city')->datalist(City::class)
Live aktualizace
TextInput::make('search') ->live() ->debounce(300)
Validace
TextInput::make('username') ->required() ->rules(['alpha_dash', 'min:3', 'max:30']) ->validationMessages(['required' => 'Username is required'])
Běžné volby
TextInput::make('bio') ->label('Short bio') ->helperText('Displayed on your profile') ->hint('Max 255 chars') ->placeholder('Tell us about yourself') ->disabled(fn () => $this->locked) ->readOnly(fn () => ! auth()->user()->canEdit()) ->autofocus()
Kompletní seznam sdílených metod viz Společné API pole.