Tabulka
TextInputColumn
Inline textový input — validuje a ukládá při blur (nebo enter).
Na této stránce
Inline textový input — validuje a ukládá při blur (nebo enter).
use NyonCode\WireTable\Columns\TextInputColumn;
Základní použití
TextInputColumn::make('name') ->rules(['required', 'string', 'max:255']) ->saveOnBlur()
Typy inputu
type() nastaví HTML typ inputu přímo; zkratky níže pokrývají běžné případy
a některé navíc nastaví i rozumný step.
TextInputColumn::make('quantity')->numeric() // type="number"TextInputColumn::make('quantity')->integer() // type="number", step="1"TextInputColumn::make('rate')->decimal() // type="number", step="0.01"TextInputColumn::make('rate')->decimal(3) // type="number", step="0.001" TextInputColumn::make('email')->email() // type="email"TextInputColumn::make('phone')->tel() // type="tel"TextInputColumn::make('website')->url() // type="url"TextInputColumn::make('secret')->password() // type="password" TextInputColumn::make('code')->type('search') // jakýkoli typ, který potřebuješ
Formátovaná čísla
money() zobrazí hodnotu se separátory a při uložení ji parsuje zpět na číslo.
Input zůstává type="text" — nativní number input by formátovaný řetězec odmítl.
TextInputColumn::make('total') ->money() // 1234567.5 -> "1 234 568" ->money(2) // 1234567.5 -> "1 234 567,50" ->money(2, ',', '.') // 1234567.5 -> "1,234,567.50" TextInputColumn::make('total')->czk(2) // alias: money() s českým formátem
Zadání 1 234,50 uloží 1234.5: oddělovač tisíců se odstraní, desetinný
oddělovač se změní na tečku a jakýkoli další znak se zahodí.
Validace
TextInputColumn::make('name') ->rules(['required', 'string', 'max:255']) // nahradí seznam pravidel ->rule('alpha_dash') // přidá jedno pravidlo ->required() // zkratka: přidá 'required' ->validationMessages(['max' => 'Příliš dlouhé!']) ->validationAttribute('celé jméno') // název použitý ve zprávách
Pravidla mohou být i Closure, která dostane záznam:
TextInputColumn::make('discount') ->rules(fn ($record) => $record->is_vip ? ['numeric', 'max:50'] : ['numeric', 'max:10'])
required(false)pravidlorequiredneodstraní — jen nic nepřidá. Buď volání vynech, nebo seznam řiď přesrules().
Validace běží normálně při uložení. Pro validaci během psaní:
TextInputColumn::make('name')->liveValidation() // 500ms debounceTextInputColumn::make('name')->liveValidation(debounce: 150)
Nativní omezení
Vykreslí se jako atributy inputu, takže je vynucuje i prohlížeč. Nenahrazují
rules() — podvržený požadavek prohlížeč obejde.
TextInputColumn::make('quantity') ->min('0')->max('9999') // meze pro číslo/datum ->step('0.5') ->minLength(3)->maxLength(255) ->pattern('[A-Z]{3}-[0-9]+')
Ukládání
TextInputColumn::make('name') ->saveOnBlur() // uložit při ztrátě fokusu ->saveOnEnter() // uložit při Enteru
saveUsing() nahradí ukládání úplně — callback dostane záznam, novou hodnotu
a sloupec a je zodpovědný za uložení:
TextInputColumn::make('name') ->saveUsing(fn ($record, $value, $column) => $record->forceFill(['name' => $value])->saveQuietly())
Na úspěšné uložení zareaguješ přes afterStateUpdated():
TextInputColumn::make('quantity') ->afterStateUpdated(fn ($record, $value) => $record->order->recalculateTotal())
Transformace hodnot
beforeSave() běží jako poslední, až po vestavěných transformacích:
TextInputColumn::make('code') ->trim() // odstraní okolní bílé znaky ->nullable() // uloží '' jako null ->uppercase() // nebo ->lowercase() ->beforeSave(fn ($value, $record) => str_replace(' ', '-', $value))
Save pipeline běží v tomto pořadí: trim → nullable → parsování čísla
(money()) → uppercase/lowercase → beforeSave().
Opačným směrem: afterLoad() tvaruje hodnotu vkládanou do inputu
a displayFormat() tvaruje read-only text zobrazený, když buňka není editovatelná:
TextInputColumn::make('phone') ->afterLoad(fn ($value, $record) => $value ? '+420 '.$value : '') ->displayFormat(fn ($value, $record) => $value ?: '—')
Vzhled inputu
TextInputColumn::make('price') ->inputPrefix('$') ->inputSuffix('.00') ->helperText('Cena bez DPH') ->inputClass('font-mono text-right') ->autocomplete('off') ->autofocus()
editPermission() se vynucuje na serveru při každém uložení, ne jen v UI.
Vyhodnocuje se proti přihlášenému uživateli přes hasPermissionTo() nebo can()
a uživatel s rolí Super Admin projde vždy.
API TextInputColumn
// Typ->type(string $type) // syrový HTML typ inputu->numeric() // type="number"->integer() // type="number", step="1"->decimal(int $places = 2) // type="number", step odvozený z $places->email() / ->tel() / ->url() / ->password() // Formátovaná čísla->money(int $decimals = 0, string $thousandsSeparator = ' ', string $decimalSeparator = ',')->czk(int $decimals = 0) // alias pro money() s českým formátem // Validace->rules(array|Closure $rules) // Laravel pravidla; Closure dostane záznam->rule(string $rule) // přidá jedno pravidlo->required(bool $required = true) // přidá 'required'; false nedělá nic->validationMessages(array $messages)->validationAttribute(string $attribute)->liveValidation(bool $live = true, int $debounce = 500) // Nativní omezení inputu->min(?string $min) / ->max(?string $max)->minLength(?int $length) / ->maxLength(?int $length)->pattern(?string $pattern)->step(?string $step) // Ukládání->saveOnBlur(bool $save = true)->saveOnEnter(bool $save = true)->saveUsing(?Closure $callback) // fn($record, $value, $column) — nahradí ukládání->afterStateUpdated(?Closure $callback) // fn($record, $value) — po úspěšném uložení->editableUsing(Closure $callback) // zděděné z Column // Transformace hodnot->trim(bool $trim = true)->nullable(bool $nullable = true) // '' se stane null->uppercase(bool $uppercase = true) / ->lowercase(bool $lowercase = true)->beforeSave(Closure $formatter) // fn($value, $record) — běží poslední před uložením->afterLoad(Closure $formatter) // fn($value, $record) — tvaruje hodnotu v inputu->displayFormat(Closure $formatter) // fn($value, $record) — read-only zobrazení // Vzhled->inputPrefix(?string $prefix) / ->inputSuffix(?string $suffix)->helperText(?string $text)->inputClass(?string $class)->autocomplete(?string $autocomplete)->autofocus(bool $autofocus = true) // Řízení přístupu->disabled(bool|Closure $disabled = true)->readonly(bool|Closure $readonly = true)->editPermission(?string $permission) // vynuceno na serveru při uložení