Začínáme
Řešení potíží
Selhání, na která lidi opravdu narazí — většinou nesoulad konfigurace v hostitelské aplikaci — a oprava pro každé z nich.
Na této stránce
- Tlačítka a inputy jsou neviditelné
- Komponenty se vykreslují bez stylů
- Slide-over je ukotvený vlevo, přetéká nebo nejde scrollovat
- „No publishable resources for tag“
- Chyby Alpine nebo komponenty reagující dvakrát
- wireX is not defined po návštěvě přes wire:navigate
- JavaScriptové 404 a wireX is not defined
- Řazení přestalo fungovat, nebo můj kód přišel o window.Sortable
- JavaScript pole neběží uvnitř modalu
- save() vyhodí chybu bez modelu
- Notifikace / toasty se neobjevují
- Validační chyby se nezobrazují
- Pořád zaseknutí?
Běžné problémy a jejich nápravy. Většina jsou nesoulady konfigurace v hostitelské Laravel aplikaci, ne bugy ve Wire.
Tlačítka a inputy jsou neviditelné
Příznak: Tlačítka, badge a focus ringy se vykreslí jako bílé-na-průhledném nebo zmizí úplně.
Příčina: Tailwind barva primary není definovaná. Wire používá primary pro
každý akcent, takže bez ní tyto prvky nemají barvu.
Náprava: Definujte primary v konfiguraci Tailwindu — viz
Začínáme → Barva primary a
Vzhled → Barvy.
Komponenty se vykreslují bez stylů
Příznak: Markup se objeví, ale bez Tailwind stylování.
Příčina: Tailwind neskenuje vendor pohledy Wire, takže se jejich třídy odstraní z buildu.
Náprava: Přidejte cesty k pohledům Wire do pole content v Tailwindu:
content: [ './vendor/nyoncode/wire-core/resources/views/**/*.blade.php', './vendor/nyoncode/wire-core/src/**/*.php', './vendor/nyoncode/wire-forms/resources/views/**/*.blade.php', './vendor/nyoncode/wire-forms/src/**/*.php', './vendor/nyoncode/wire-table/resources/views/**/*.blade.php', './vendor/nyoncode/wire-table/src/**/*.php', './vendor/nyoncode/wire-sortable/resources/views/**/*.blade.php', './vendor/nyoncode/wire-sortable/src/**/*.php',],
Cesty src/**/*.php jsou důležité: některé komponenty skládají své utility třídy
v PHP (pozicování, šířka, výška), takže skenování jen Blade pohledů nechá tyto
třídy odstraněné. Na Tailwindu 4 přidejte odpovídající @source řádky pro
resources/views i src (viz průvodce začínáme).
Poté přebuildujte assety (npm run build nebo npm run dev).
Slide-over je ukotvený vlevo, přetéká nebo nejde scrollovat
Příznak: Slide-over akce (->slideOver()) se objeví přišpendlený vlevo
se ztmavenou stránkou vpravo, jeho obsah přetéká za viewport, patička sedí
mimo obrazovku dole a tělo nejde scrollovat.
Příčina: Slide-over skládá své utility pro pozicování, šířku a výšku v PHP
(SlideOverComponent), ne v Blade souboru — třídy jako sm:right-0,
sm:pl-10, sm:h-full, max-h-[85vh] a sm:max-w-2xl. Pokud Tailwind skenuje
jen resources/views a ne src balíčku, tyto třídy se odstraní: bez sm:right-0
panel spadne vlevo a bez výškových utilit není nikdy omezený na výšku, takže
přetéká místo scrollování těla.
Náprava: Přidejte cesty src/**/*.php (Tailwind 3) nebo odpovídající @source
řádky (Tailwind 4) podle Komponenty se vykreslují bez stylů,
pak přebuildujte. Viz také průvodce začínáme.
„No publishable resources for tag“
Příznak: vendor:publish hlásí žádné zdroje pro tag jako
wire-forms-config.
Příčina: Publish tagy Wire používají oddělovač ::, ne pomlčku.
Náprava: Použijte správný formát tagu:
php artisan vendor:publish --tag=wire-forms::config # ✅php artisan vendor:publish --tag=wire-forms::viewsphp artisan vendor:publish --tag=wire-forms::translations
Skupiny jsou config, views, translations a (kde je to relevantní)
migrations — každá s prefixem krátkého názvu balíčku a ::.
Chyby Alpine nebo komponenty reagující dvakrát
Příznak: Chyby v konzoli o dvojité inicializaci Alpine, nebo direktivy spouštějící se dvakrát.
Příčina: Alpine byl nainstalován a nastartován samostatně. Livewire 4 už Alpine dodává a startuje.
Náprava: Odstraňte jakoukoli samostatnou instalaci Alpine a volání
Alpine.start(). Nechte ho poskytnout Livewire.
wireX is not defined po návštěvě přes wire:navigate
Příznak: Stránka funguje, když se načte přímo, ale při příchodu přes
wire:navigate — nebo tlačítky Zpět/Vpřed v prohlížeči — je tabulka či formulář
mrtvý. V konzoli je ReferenceError se jménem Wire komponenty
(wireRecordSelection, wireDropdown, wireSortable, …). Nejhlasitější varianta
je šedý scrim přes celou stránku nad mrtvou tabulkou: každý backdrop mobilního
sheetu je navázaný na stav, který nikdy nevznikl.
Příčina: Bundle definující komponentu dorazil spolu s novou stránkou a cesta
cachovaného Zpět/Vpřed v Livewire nečeká na nově injektované <head> skripty, než
na prohozeném markupu inicializuje Alpine.
Náprava: Dejte direktivu do <head> layoutu, ať jsou controllery v dokumentu
už od prvního načtení stránky, kde je nemá co předběhnout:
<head> @wireStackScripts</head>
Viz Začínáme → JavaScriptové assety.
JavaScriptové 404 a wireX is not defined
Příznak: Tentýž ReferenceError jako v předchozí sekci, ale na každé stránce
a bez ohledu na to, jak jste se na ni dostali — objeví se i po tvrdém reloadu.
V network tabu jsou 404 na
/wire-core/assets/dropdown.js, /wire-table/assets/records.js nebo sourozence
pod /wire-forms/… či /wire-sortable/….
Příčina: Sešly se dvě věci. Balíčky si normálně bundly zkopírují do
public/vendor/<balíček> a emitují tyhle cesty, takže PHP nic neřeší — URL
/wire-core/assets/… ve vašem markupu znamená, že se kopie nepovedla a zaskakuje
za ni routa balíčku. A váš webserver na tu routu odpovídá sám, místo aby ji předal
PHP. Standardní nginx konfigurace Laravelu posílá cokoliv, co není na disku, do
index.php, konfigurace s blokem pro statické assety už ne:
location ~* \.(js|css)$ { try_files $uri =404; # routa není soubor na disku → 404, PHP to nikdy neuvidí}
Nic z toho není specifické pro tyhle balíčky: tentýž blok vrací 404 i na Livewire
vlastní /livewire-{hash}/livewire.js.
Řešení — zapisovatelné public/, nebo kopie při buildu. Obvyklou příčinou je
public/, do kterého webový uživatel nesmí zapisovat, nebo read-only kontejner.
Buď zápis povolte, nebo kopii udělejte, dokud je filesystém ještě zapisovatelný:
php artisan vendor:publish --tag=laravel-assets --force
Nebo zpřístupněte routu tím, že necháte blok propadnout do front controlleru —
správná odpověď tam, kde zapisovatelné public/ opravdu není ve hře:
location ~* \.(js|css)$ { try_files $uri /index.php?$query_string; // [tl! focus]}
Příbuzné varování, když kopie existují, ale po upgradu je nešlo obnovit:
wireStack: the published copies of wire-core/dropdown are older than the bundlesthe packages ship, and are what this page just loaded.
Stránka funguje dál — starý bundle je lepší než žádný — ale stojí za tím tentýž problém se zápisem. Viz Začínáme → JavaScriptové assety.
Řazení přestalo fungovat, nebo můj kód přišel o window.Sortable
Příznak: Po upgradu vyhazuje vlastní JavaScript vaší aplikace
Sortable is not defined.
Příčina: SortableJS je nově zkompilovaný do bundlu wire-sortable a
config('wire-sortable.sortablejs_cdn') je ve výchozím stavu null — CDN skript,
který po sobě nechával globál, se tedy už nenačítá. Vlastního řazení Wire se to
netýká; drag controller používá zabundlovanou kopii.
Náprava: Pokud váš kód globál potřebuje, řekněte si o něj — buď nastavte
konfigurační klíč zpět na CDN URL, nebo si dejte npm install sortablejs a
window.Sortable přiřaďte sami. Viz
Instalace Sortable → SortableJS.
JavaScript pole neběží uvnitř modalu
Příznak: JS-based pole funguje na normální stránce, ale je mrtvé při otevření v modalu nebo po Livewire updatu.
Příčina: Prostý <script> tag injektovaný přes DOM morphing Livewire se nikdy
nespustí.
Náprava: Načtěte skript pomocí direktivy @assets Livewire (vestavěný
TiptapEditor to dělá). Pokud stavíte vlastní JS pole, následujte stejný
vzor — viz
Rozšíření formulářů → JS-based pole.
save() vyhodí chybu bez modelu
Příznak: Volání $form->save() vyhodí chybu.
Příčina: Formulář nemá model (model(null) nebo žádný nastavený), takže není
co uložit.
Náprava: Buď nastavte model (->model(User::class) pro create,
->model($user) pro update), poskytněte vlastní perzistenci pomocí
->using(...), nebo místo toho zavolejte ->validate(), když potřebujete jen
data. Viz Režimy modelu.
Notifikace / toasty se neobjevují
Příznak: Akce uspějí, ale žádný toast ani notifikace se nezobrazí.
Příčina: V layoutu chybí kontejner notifikací.
Náprava: Přidejte ho jednou blízko konce <body>:
<x-wire-notifications::toast-container />
Layout viz Začínáme a Core → Notifikace.
Validační chyby se nezobrazují
Příznak: Validace selže (uložení je zablokováno), ale pod polem se nevykreslí žádná zpráva.
Příčina: statePath formuláře neodpovídá vlastnosti komponenty držící stav,
takže se klíče chyb a cesty polí rozcházejí.
Náprava: Ujistěte se, že ->statePath('data') odpovídá veřejné vlastnosti
(public array $data = []) a že formulář vykreslujete pomocí {{ $this->form }}.
Chyby polí jsou klíčované plnou state cestou (například data.email) — na tuto
cestu asertujte v testech.
Pořád zaseknutí?
- Znovu si přečtěte dokumentaci konkrétního balíčku pro danou funkci (Forms, Table, Sortable, Core).
- U problémů s runtime/stavem spusťte Integration sadu, zda se chování reprodukuje:
vendor/bin/pest --configuration phpunit.xml --testsuite "Integration". - Zkontrolujte Návod k upgradu, pokud problém začal po aktualizaci.