Jak zachytit validaci v Livewire
Tento návod pravděpodobně nebude muset řešit většina lidí, nicméně se může někomu hodit. Nedávno jsem řešil problém v Laravel Livewire, kdy jsem potřeboval v komponentě zachytit výjimku při validaci a v šabloně přes javascript stránku uživateli scrollovat nahoru. Ačkoliv to může znít jednoduše, tak bohužel v dokumentaci chybí jakákoliv informace o tom jak v komponentně zachytit validaci.
Naštěstí se mi podařilo přes Livewire Discord zjistit toto řešení:
public function someMethod()
{
Livewire::listen('failed-validation', function () {
$this->dispatchBrowserEvent('scrollTop');
});
$this->validate();
}
Při validaci se automaticky zavolá event failed-validation
. Jelikož je to ale interní volání, tak jej nelze použít klasicky v propertě $listeners
a také posluchač musí být zaregistrován ještě před samotnou validací. V posluchači lze pak jednoduše využít metodu dispatchBrowserEvent()
, kterou lze zavolat v javascriptu - v mém případě požadovaný scroll. Aktuálně neexistuje jednodušší řešení a tak můžeme jenom doufat, že Caleb přijde s něčím elegantnějším.
A na závěr opět přikládám ukázku na Laravel Playground: