跳转到主要内容

什么是 Wayfinder

Laravel Wayfinder 是一个零摩擦地把 Laravel 后端和 TypeScript 前端桥接起来的包。它会根据控制器和路由自动生成完全类型化的 TypeScript 函数,让你在前端可以像调用普通函数一样直接调用 Laravel 的端点。 URL 硬编码、路由参数手动维护、后端变化人工同步——这些统统不需要了。
Wayfinder 目前是 Beta 版(当前 v0.1.x)。在 v1.0.0 发布前 API 可能会变化。所有重要变更都会记录在 CHANGELOG 中。

Ziggy 与 Wayfinder 的差异

什么是 Ziggy

Ziggy 是长期以来在 Laravel 生态里广泛使用的路由 helper。它把 Laravel 的路由定义暴露给 JavaScript 端,让你可以用 route('posts.show', { id: 1 }) 这样的形式生成 URL。

为什么被 Wayfinder 取代

Ziggy 用字符串来表达路由名和参数,与 TypeScript 的契合度有限。路由名的拼写错误或参数名错误只能在运行时才暴露。 Wayfinder 是 TypeScript first 的设计,会把控制器方法生成为可导入的函数 在基于 Inertia 的 Laravel 启动套件(React / Vue / Svelte)中,Wayfinder 已被默认采用。

安装

1. 用 Composer 安装服务端包

2. 用 NPM 安装 Vite 插件

3. 在 vite.config.js 中加入插件

加上 Vite 插件后,开发服务器运行时,只要 PHP 文件或路由文件发生变化,TypeScript 文件就会被自动重新生成。

生成 TypeScript 定义文件

wayfinder:generate 命令生成 TypeScript 文件。
默认会在 resources/js 下生成 3 个目录。
生成的文件会在每次构建时完全重生成,建议把它们加入 .gitignore。可以把 wayfinderactionsroutes 3 个目录一次性排除掉。
想改输出位置时用 --path 参数。
也可以只生成 action 或只生成路由。

基本用法

导入并使用 action

生成 PostControllershow 方法对应 URL 的示例。
只需要 URL 时用 .url()
也可以指定具体的 HTTP 方法。

参数传递方式

Wayfinder 的函数支持多种形态的参数。
路由上指定了键绑定(/posts/{post:slug})时,可以直接传对应的值。

一次性导入整个控制器

也可以直接把整个控制器导入,然后调用其方法。
整个控制器导入时不会享受到树摇,所有 action 都会被打进 bundle。想让最终 bundle 更小,建议逐个导入。

单一 action 控制器

单一 action 控制器(Invokable Controller)对应的导入函数可以直接调用。

导入命名路由

按路由名访问时使用 routes/ 下的文件。

查询参数

所有 Wayfinder 函数都能通过 query 选项加查询参数。
要和当前 URL 的查询参数合并时用 mergeQuery

表单变体

想在传统 HTML 表单中使用时,加上 --with-form 参数生成,然后用 .form 变体。

Inertia 与 Wayfinder 的搭配

把 Inertia 的 form helper 与 Wayfinder 组合起来,就可以在不写任何 URL 字符串的情况下完成表单提交。
Link 组件里也可以这样用。

在启动套件中的采用

laravel new 创建新项目并选择 React / Vue / Svelte 时,Wayfinder 会作为自动配置好的组件被引入。启动套件里包含:
  • Composer 包 laravel/wayfinder
  • NPM 包 @laravel/vite-plugin-wayfinder
  • vite.config.js 里已加入插件配置
  • 生成目录已经加入 .gitignore
在已有项目中按上面的步骤手动引入同样可行。

处理和保留字冲突的方法名

deleteimport 这类和 JavaScript 保留字重名的控制器方法,会加上 Method 后缀。

当前状态(v0.1.x)

当前稳定版位于 v0.1.x 分支。截至 2026 年 3 月的最新版本是 v0.1.15

v0.1.x 系列主要更新记录


next 分支中开发中的下一代能力

next 分支正在开发相较 v0.1.x 大幅扩展的下一版。
next 分支可以通过 dev-next 约束安装,但 API 可能大幅变化,不建议在生产环境使用。

生成的 TypeScript 范围大幅扩展

v0.1.x 只针对路由和控制器 action,而下一版会把下面的东西都作为 TypeScript 生成。

Form Request 的 TypeScript 类型生成

从上面的 Form Request 会生成:

Eloquent 模型的类型生成

上面的模型会在 types.d.ts 里生成类型:

PHP Enum 转 TypeScript

类型和常量都会生成:

输出目录变化

v0.1.x 中会分成 actions/routes/wayfinder/ 3 个目录,而下一版把它们汇集到 resources/js/wayfinder 下。

从 v0.1.x 到 next 的主要变化

  • 导入路径从 @/actions/... 变成 @/wayfinder/...
  • 废弃 --skip-actions--skip-routes--with-form 参数,统一改到配置文件
  • types.ts 改名为 types.d.ts

总结

Laravel Wayfinder 把 Ziggy 提供的“在 JavaScript 里引用 Laravel 路由”的能力用 TypeScript first 的方式重新设计。通过导入并调用生成的函数,类型安全、IDE 支持和树摇都得到了显著改善。 即便是当前的 v0.1.x,对路由和控制器 action 的类型安全引用也已经足够好用,并且在基于 Inertia 的 Laravel 启动套件中已成为标配。next 分支正在开发的下一版会把 Form Request、Eloquent 模型、Enum、Inertia 页面 props 也一起生成为 TypeScript,朝着更全面的类型安全基座演进。

Laravel Wayfinder GitHub

源代码、CHANGELOG、Issue 请查看这里。

Vite Plugin Wayfinder

Vite 插件的配置项详情请查看这里。
最后修改于 2026年7月18日