简介
Laravel 提供了若干辅助函数用来生成应用中的 URL。 在模板或 API 响应中构建链接、或生成指向应用其他位置的重定向响应时,它们特别有用。基本用法
生成 URL
使用url 辅助函数可以生成任意 URL。
生成的 URL 会自动使用当前请求所处理的 scheme(HTTP 或 HTTPS)和主机名。
query 方法。
获取当前 URL
调用url 辅助函数时若不传入路径,会返回一个 Illuminate\Routing\UrlGenerator 实例,允许你访问当前 URL 的相关信息。
URL 门面访问。
获取上一个 URL
有时你需要知道用户在访问当前页面之前所在的 URL。可以通过url 辅助函数的 previous 或 previousPath 方法来获取。
命名路由的 URL
route 辅助函数可以用来生成命名路由的 URL。
使用命名路由可以让你在生成 URL 时不依赖具体的实际 URL。
这样一来,即使某个路由的 URL 发生变化,也无需修改 route 函数的调用。
Eloquent 模型
在生成 URL 时,通常会使用 Eloquent 模型的路由键(一般为主键)。 因此,你可以直接把 Eloquent 模型作为参数值传入,route 辅助函数会自动取出模型的路由键。
签名 URL
Laravel 可以很方便地为命名路由创建「签名」URL。 这些 URL 会在查询字符串中附加一个「签名」哈希,Laravel 通过它验证 URL 创建后是否被篡改过。 签名 URL 特别适用于允许公开访问、但仍需防范 URL 篡改的路由。 例如,你可以用签名 URL 来实现邮件中发送给用户的公开「取消订阅」链接。 使用URL 门面的 signedRoute 方法即可创建签名 URL。
signedRoute 方法指定 absolute 参数,可以在签名 URL 哈希中排除域名。
temporarySignedRoute 方法。
Laravel 在校验临时签名 URL 时,会同时验证编码在 URL 中的过期时间戳尚未到达。
签名 URL 的校验流程
校验签名路由请求
要判断接收到的请求是否携带有效签名,可以调用Illuminate\Http\Request 实例的 hasValidSignature 方法。
hasValidSignatureWhileIgnoring 方法。
signed(Illuminate\Routing\Middleware\ValidateSignature)中间件。
如果接收到的请求没有有效签名,中间件会自动返回 403 响应。
relative 参数。
处理无效的签名路由
访问过期的签名 URL 时,会显示一个403 HTTP 状态的通用错误页面。
你可以在 bootstrap/app.php 中为 InvalidSignatureException 定义自定义 render 闭包来自定义此行为。
控制器动作的 URL
action 函数用于生成指向指定控制器动作的 URL。
流式 URI 对象
Laravel 的 URI 类提供了一种流式接口,可以通过对象方式创建和操作 URI。默认 URL 参数
有时你希望对某个 URL 参数在整个请求生命周期中都指定一个默认值。 例如许多路由都定义了{locale} 参数。
route 辅助函数都要传入 locale 十分繁琐。
你可以使用 URL::defaults 方法,在当前请求中始终应用该参数的默认值。
如果在路由中间件中调用该方法,就可以直接访问当前请求。
locale 参数设置了默认值,使用 route 辅助函数生成 URL 时就不必再传入该值。
设置默认 URL 参数可能会干扰 Laravel 的隐式模型绑定。
请通过中间件优先级设置,让设置默认 URL 参数的中间件在 Laravel 的
SubstituteBindings 中间件之前执行。
可以在 bootstrap/app.php 中使用 priority 中间件方法进行设置。