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: