路由进阶使用-路由即可实现模型查询【路由模型绑定】-更方便的处理404自定义操作【兜底路由】- 请求频率限制内置throttle 中间件

未匹配的标注

路由进阶使用-路由即可实现模型查询【路由模型绑定】-更方便的处理404自定义操作【兜底路由】- 请求频率限制内置throttle 中间件

学习链接

xueyuanjun.com/post/9615

路由模型绑定

是什么?

Laravel 提供了一个「路由模型绑定」功能来简化通过model查询id的数据,通过路由模型绑定,我们只需要定义一个特殊约定的参数名(比如 {task})来告知路由解析器需要从 Eloquent 记录中根据给定的资源 ID 去查询模型实例,并将查询结果作为参数传入而不是资源 ID。

有两种方式来实现路由模型绑定:隐式绑定显式绑定

隐式绑定

比如路由参数,给task,并且在闭包或者控制器方法中对参数仅限类型提示。即可完成。

Route::get('task/{task}', function (\App\Models\Task $task) {
    dd($task); // 打印 $task 明细
});

显式绑定

显式绑定需要手动配置路由模型绑定,通常需要在 App\Providers\RouteServiceProviderboot() 方法中新增如下这段配置代码:

public function boot()
{
    // 显式路由模型绑定
    Route::model('task_model', Task::class);

    parent::boot();
}

这段代码意思为,以后每次访问包含了{task_model}参数的路由时,路由解析器都会从请求 URL 中解析出模型 ID ,然后从对应模型类 Task 中获取相应的模型实例并传递给闭包函数或控制器方法.
如果不存在,则返回404.

优点

避免了我们传入 $id 后再进行查询,而是把这种模板式代码交由 Laravel 框架底层去实现

缺点

性能不高。

由于在正式开发中,出于性能的考虑通常会对模型数据进行缓存,此外在很多情况下,需要关联查询才能得到我们需要的结果,所以并不建议过多使用这种路由模型绑定。

如何自定义404后的操作?什么是兜底路由?

匹配到最后了,还匹配不到。

那就随便处理,一般用来处理404相应的自定义操作。 Route::fallback 来定义

Route::fallback(function () {
    return '我是最后的屏障';
});

服务器也可以自定义指定状态码,显示的页面。配置即可。

如何进行路由频率限制?

以前我们需要自己写中间件,现在我们直接使用内置的 throttle 中间件

该中间件接收两个参数,第一个是次数上限,第二个是指定时间段(单位:分钟)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~