Formuláře
Textarea
Víceřádkový text, s počtem řádků a chováním při změně velikosti.
Na této stránce
Víceřádkový text. Sáhni po Textarea, kdykoli je odpovědí věta a víc — poznámka,
popis, adresa. Na jeden řádek použijte TextInput; na text, který
má jít formátovat, rich nebo markdownový
editor.
use NyonCode\WireForms\Components\Textarea;
Jak to funguje
Textarea je pole: řetězec na své state path, validovaný jako kterékoli jiné.
Vykreslí obyčejný <textarea> — žádný editor, žádný toolbar — a přesně proto je
to správná výchozí volba na volný text, který nechcete mít označkovaný.
rows() nastavuje počáteční výšku, ne limit. Vypíše HTML atribut rows
a výchozí hodnota je 3. Uživatel si roh vždycky může přetáhnout a zvětšit si to;
nic mu v tom nebrání.
autosize() výšku převezme. Přidá drobný Alpine handler, který při každém
vstupu nastaví style.height na scrollHeight obsahu — a protože běží i na
x-init, tak už od prvního vykreslení. Inline výška přebije atribut rows, takže
při zapnutém autosize řídí rows() jen ten okamžik, než naběhne Alpine. Box roste
i se zmenšuje podle textu.
cols() skoro nikdy není to, co chcete. Vypíše atribut cols, jenže element
nese w-full a CSS šířka přebije HTML počet sloupců. Na zúžení textarey použijte
columnSpan() v Gridu, ne cols().
spellcheck() má tři hodnoty. null — výchozí — atribut vůbec nevypíše
a nechá rozhodnutí na prohlížeči a OS. true a false ho vynutí. To je rozdíl
mezi „nemám názor“ a „vypnout“ a jen to druhé zastaví prohlížeč v podtrhávání pole
plného produktových kódů.
minLength() / maxLength() dělají dvě věci naráz. Vypíšou HTML atributy
a přidají validační pravidla min / max, takže se limit vynucuje na serveru,
ne jen naznačuje v prohlížeči. A kontrolují se už při skládání: záporná délka nebo
minLength nad maxLength vyhodí FormConfigurationException při sestavení
formuláře, místo aby to tiše spadlo až při validaci.
Základní použití
Textarea::make('description') ->label('Popis') ->rows(5) ->maxLength(1000)
Růst s textem
Textarea::make('notes') ->autosize() ->rows(3) // výška, než to převezme Alpine
Vypnutí kontroly pravopisu
Textarea::make('sku_list') ->label('SKU, jedno na řádek') ->spellcheck(false) ->autosize()
Živé aktualizace
Textarea na live() posílá round trip na každý stisk klávesy, takže jí dejte
debounce:
Textarea::make('bio') ->live() ->debounce(500)
Rozšířený příklad
Formulář článku ve skutečném Livewire hostu — jednořádkový titulek, krátké shrnutí s tvrdým limitem a tělo, které roste, jak se píše:
use Livewire\Component;use NyonCode\WireForms\Components\TextInput;use NyonCode\WireForms\Components\Textarea;use NyonCode\WireForms\Forms\Form;use NyonCode\WireForms\Forms\WithForms; class EditArticle extends Component{ use WithForms; public ?array $data = []; public function form(Form $form): Form { return $form ->statePath('data') ->model(Article::class) ->schema([ TextInput::make('title')->required(), Textarea::make('summary') ->label('Shrnutí') ->helperText('Zobrazuje se ve výpisech a ve výsledcích hledání.') ->rows(2) ->maxLength(160) ->required(), Textarea::make('body') ->label('Tělo') ->autosize() ->rows(8) ->minLength(50), ]) ->successMessage('Článek uložen'); } public function save(): void { $this->form->save(); }}
Shrnutí je omezené na 160 znaků v prohlížeči i na serveru; tělo nesmí být kratší než 50 znaků a roste, jak se píše.
Textarea API
->rows(int $rows) // počáteční výška v řádcích — výchozí 3->cols(?int $cols) // HTML atribut cols; obvykle vyhraje w-full — použij radši columnSpan()->autosize(bool $condition = true) // růst a zmenšování podle obsahu — výchozí false->spellcheck(?bool $condition = true) // true|false to vynutí; null (výchozí) nechá na prohlížeči->minLength(?int $length) // HTML atribut A validační pravidlo `min`->maxLength(?int $length) // HTML atribut A validační pravidlo `max`->getRows(): int->getCols(): ?int->isAutosize(): bool->getSpellcheck(): ?bool->getMinLength(): ?int->getMaxLength(): ?int
Popisky, nápovědu, placeholder, prefixy, viditelnost, výchozí hodnoty, validaci
a live() sdílí každé pole — viz Společné API pole.
Související
- TextInput — týž řetězec na jednom řádku
- RichEditor a MarkdownEditor — když text nese formátování
- Grid — kde o šířce rozhoduje
columnSpan() - Reaktivní pole —
live()a jeho debounce