Spiega Laravel Wayfinder, il pacchetto che sostituisce Ziggy adottato negli starter kit Inertia. Descrive in dettaglio il meccanismo che collega in modo type-safe il backend Laravel al frontend TypeScript, le differenze rispetto a Ziggy, installazione, uso di base e le funzionalità di nuova generazione in sviluppo nel branch next.
Laravel Wayfinder è un pacchetto che collega senza attriti il backend Laravel al frontend TypeScript. Genera automaticamente funzioni TypeScript completamente tipizzate a partire da controller e rotte, così puoi chiamare gli endpoint Laravel direttamente come funzioni dal codice frontend.Nessuna hardcoding di URL, nessuna gestione manuale dei parametri di rotta, nessuna sincronizzazione manuale dei cambiamenti backend: tutto questo diventa superfluo.
Wayfinder è in Beta (attualmente v0.1.x). Prima del rilascio di v1.0.0 l’API può cambiare. Tutte le modifiche importanti sono registrate nel CHANGELOG.
Ziggy è un route helper usato per anni nell’ecosistema Laravel. Espone al lato JavaScript le definizioni di rotta di Laravel, permettendo di generare URL con route('posts.show', { id: 1 }).
Ziggy tratta nome della rotta e parametri come stringhe e ha limiti nell’interazione con TypeScript. Refusi nei nomi di rotta o nomi di parametri errati diventano errori solo a runtime.Wayfinder è progettato TypeScript-first e genera i metodi dei controller come funzioni importabili.
Confronto
Ziggy
Wayfinder
Riferimento alla rotta
route('posts.show', { id: 1 })
import { show } from "@/actions/..."
Type-safety
Definizioni di tipo limitate
Tipi TypeScript completi
Supporto IDE
Completamento debole
Completamento e type check completi
Tree-shaking
Include tutte le rotte nel bundle
Solo le rotte usate nel bundle
Momento di generazione
Iniezione a runtime
Generazione statica in build
Negli starter kit Laravel basati su Inertia (React, Vue, Svelte), Wayfinder è adottato come standard.
import { wayfinder } from "@laravel/vite-plugin-wayfinder";import { defineConfig } from "vite";import laravel from "laravel-vite-plugin";export default defineConfig({ plugins: [ laravel({ input: ["resources/js/app.ts"], refresh: true, }), wayfinder(), ],});
Aggiungendo il plugin Vite, mentre il server di sviluppo è attivo, i file TypeScript vengono rigenerati automaticamente ogni volta che si modificano i file PHP o i file di rotta.
Con il comando wayfinder:generate puoi generare i file TypeScript.
php artisan wayfinder:generate
Per impostazione predefinita vengono generate tre directory sotto resources/js.
resources/js/├── actions/ # Funzioni per le azioni dei controller│ └── App/Http/Controllers/│ └── PostController.ts├── routes/ # Funzioni per le rotte con nome│ └── post.ts└── wayfinder/ # File di definizione di tipo └── types.ts
I file generati vengono ricreati completamente a ogni build, quindi è consigliato aggiungerli a .gitignore. Escludi le tre directory wayfinder, actions e routes insieme.
Se vuoi cambiare la destinazione di output, usa l’opzione --path.
Puoi anche importare l’intero controller e chiamarne i metodi.
import PostController from "@/actions/App/Http/Controllers/PostController";PostController.show(1);PostController.index();
Importando l’intero controller si perde il tree-shaking e tutte le azioni finiscono nel bundle. Importare singolarmente mantiene più piccolo il bundle finale.
Combinando gli helper form di Inertia con Wayfinder, puoi inviare form senza scrivere alcuna stringa URL.
import { useForm } from "@inertiajs/react";import { store } from "@/actions/App/Http/Controllers/PostController";const form = useForm({ name: "My Post" });form.submit(store()); // Invio a POST /posts
Funziona allo stesso modo anche con il componente Link.
import { Link } from "@inertiajs/react";import { show } from "@/actions/App/Http/Controllers/PostController";const Nav = () => ( <Link href={show(1)}>Vedi il post</Link>);
Se crei un nuovo progetto con laravel new scegliendo React, Vue o Svelte, viene fornita una configurazione con Wayfinder già impostato. Negli starter kit sono inclusi:
Pacchetto Composer laravel/wayfinder
Pacchetto NPM @laravel/vite-plugin-wayfinder
Configurazione del plugin già impostata in vite.config.js
Directory generate già aggiunte a .gitignore
Puoi introdurlo manualmente in progetti esistenti seguendo la procedura sopra.
Gestione di nomi di metodo in conflitto con parole riservate
Ai metodi di controller con lo stesso nome di parole riservate JavaScript come delete o import viene aggiunto il suffisso Method.
// Se il controller ha un metodo deleteimport { deleteMethod } from "@/actions/App/Http/Controllers/PostController";deleteMethod(1); // { url: "/posts/1", method: "delete" }
In v0.1.x c’erano tre directory separate (actions/, routes/, wayfinder/), mentre nella prossima versione tutto è raccolto sotto resources/js/wayfinder.
resources/js/wayfinder/├── App/Http/Controllers/│ └── PostController.ts # Funzioni azione (actions/ eliminata)├── routes/│ └── post.ts # Rotte con nome (uguale)├── broadcast-channels.ts # Canali broadcast├── broadcast-events.ts # Eventi broadcast└── types.d.ts # Tutte le definizioni di tipo (modificato da types.ts)
Laravel Wayfinder è la riprogettazione TypeScript-first della funzionalità “riferire le rotte Laravel da JavaScript” offerta da Ziggy. Con l’approccio di importare funzioni generate, migliora notevolmente su tutti i fronti: type-safety, supporto IDE e tree-shaking.Già oggi con v0.1.x realizza il riferimento type-safe di rotte e azioni dei controller ed è adottato come standard negli starter kit Laravel basati su Inertia. Nella prossima versione in sviluppo nel branch next diventerà una base type-safe ancora più completa, generando come TypeScript anche Form Request, modelli Eloquent, Enum e prop pagina Inertia.
Laravel Wayfinder GitHub
Codice sorgente, CHANGELOG e issue qui.
Vite Plugin Wayfinder
Dettagli sulle opzioni di configurazione del plugin Vite qui.