Formuláře
PhoneInput
Výběr předvolby vedle národního čísla, uložený jako jeden E.164 řetězec.
Na této stránce
Mezinárodní telefonní číslo: předvolba země se vybírá ze seznamu, zbytek se píše
a obojí je jedna hodnota. Sáhněte po něm, když se na číslo bude volat, bude se
exportovat nebo párovat — TextInput::make()->tel() přijme cokoli, co člověk
napíše, včetně národního čísla, na které nikdo mimo tu zemi nedovolá.
use NyonCode\WireForms\Components\PhoneInput;
Jak to funguje
Předvolba žije uvnitř hodnoty, ne vedle ní. Stav drží napsané mezinárodní
číslo — +420 123 456 789 — a controller ho při každém vykreslení rozdělí pro
zobrazení a při každém stisku klávesy zase složí. Pole, které by zemi drželo
zvlášť, by potřebovalo druhý sloupec, aby ji uložilo, nebo by ji ztratilo: na
číslo, jehož předvolba existuje jen v UI, se z databáze nedovoláte.
Ukládá se stejné číslo bez mezer, tedy E.164: +420123456789. Mezery jsou
prezentace — přidá je hydrateState() na cestě dovnitř a odebere
dehydrateState() na cestě ven.
Seskupuje se po trojicích a poslední osamocená číslice se přidá ke skupině před
sebou — +1 212 555 1234, ne +1 212 555 123 4. Controller píše v prohlížeči
stejné seskupení jako PHP na serveru.
Národní část se během psaní nepřeformátovává. Přeskupování při každém stisku klávesy odsune kurzor na konec vstupu, což znemožňuje editaci uprostřed čísla.
Seznam zemí je kurátorovaná tabulka (Support\DialingCodes), ne kopie
registru ITU: každá položka nese předvolbu a rozsah počtu číslic, které daná země
vydává, což je to jediné, co dělá napsané číslo kontrolovatelným. Možnosti se
čtou jako vlajka a předvolba — 🇨🇿 +420 — a vlajka se počítá z ISO kódu, místo
aby se ukládala, takže se s ním nemůže rozejít.
Předvolba není jedinečná. +1 je celý severoamerický plán, takže přiřazení
čísla k zemi odpoví první položkou, která tu předvolbu drží. Volba je kosmetická:
rozhoduje, kterou vlajku select ukáže, nikdy o platnosti čísla — země sdílející
předvolbu sdílejí i rozsah číslic.
Validace se ptá ve třech krocích a každý má vlastní hlášku: je číslo vůbec
mezinárodní (úvodní +), je jeho předvolba mezi nabízenými a má národní část
tolik číslic, kolik daná země vydává. Země mimo tabulku se drží mezí samotného
E.164 — 4 až 15 číslic — což je maximum, co může říct kontrola bez tabulky.
Nabídku lze nastavit jednou pro celou aplikaci. config('wire-forms.phone.countries')
a default_country jsou to, na co pole spadne; nastavovat je u pole je pro výjimky.
Základní použití
PhoneInput::make('phone')
Všechny země z tabulky, otevřené na Česku.
Omezení nabídky zemí
PhoneInput::make('phone') ->countries(['CZ', 'SK', 'DE', 'AT']) // v pořadí, v jakém jsou vypsané
Seznam je zároveň validací: číslo +49 pole, které nabízí jen CZ a SK,
odmítne. ISO kód, který tabulka nezná, se zahodí, místo aby se nabídl jako mrtvá
možnost.
Kde se pole otevírá
PhoneInput::make('phone') ->countries(['CZ', 'SK', 'DE']) ->defaultCountry('DE') // jinak první nabízená země
Výchozí země platí, dokud je pole prázdné; pole s číslem se otevře na zemi toho čísla.
Rozšířený příklad
use Livewire\Component;use NyonCode\WireForms\Components\PhoneInput;use NyonCode\WireForms\Components\TextInput;use NyonCode\WireForms\Forms\Form;use NyonCode\WireForms\Forms\WithForms; class EditContact extends Component{ use WithForms; public array $data = []; public function mount(Contact $contact): void { $this->form->fill($contact->attributesToArray()); } public function form(Form $form): Form { return $form ->model(Contact::class) ->statePath('data') ->schema([ TextInput::make('name')->required(), PhoneInput::make('phone') ->countries(['CZ', 'SK', 'PL', 'DE']) ->defaultCountry('CZ') ->required(), ]); }}
Sloupec drží +420123456789, připravené k vytočení, exportu nebo spárování
s číslem z jiného systému bez předchozí normalizace.
API PhoneInput
Telefonní část. Popisek, hint, placeholder, viditelnost a zbytek jsou sdílené API pole, zdokumentované ve Formulářová pole.
->countries(array $countries) // ISO 3166-1 alpha-2 kódy — výchozí: config('wire-forms.phone.countries')->defaultCountry(string $country) // kde se otevře prázdné pole — výchozí: config('wire-forms.phone.default_country')->getCountries(): array // array<int, DialingCode>->getDefaultCountry(): ?DialingCode->getCountryOptions(): array // array<int, array{country: string, dialingCode: string, label: string}>
Související
- Formulářová pole — sdílené API pole
- TextInput — pro číslo, na které nikdy nebude volat program
- Validace — jak se implicitní pravidla přidávají k vašim