上图列出了 Laravel HTTP 层的相关知识大纲。由于目前自己的工作中网页、App、小程序等都采用前后台分离的方式实现,前端页面通过接口从后端获取数据并自己渲染,因此大纲中的 Session、视图、CSRF 保护几个部分将不做整理。又限于 HTTP 层的内容太多,我在这篇中将整理路由、中间件、控制器 3 部分内容。在下一期里,再整理 HTTP 请求、响应及表单验证部分的内容。
0x00 路由
基本路由
构建最基本的路由只需要一个 URI 和一个闭包。所有的 Laravel 路由都在 routes 目录中的路由文件中定义。Laravel 默认提供 web.php 和 api.php 两个路由文件。前者定义 web 页面路由,默认应用 web 中间件组;后者定义无状态路由,会应用 api 中间件组。
Laravel 的 Route Facade 提供了 get
, post
, put
, patch
, delete
, options
, match
, any
等路由方法来支持响应单个、多个、所有的 HTTP 方法。
路由参数
Laravel 可以通过多种方式对路由参数的必选、可选及具体格式进行约束。
命名路由
Laravel 可以为指定路由或者控制器方法命名,也可以为已命名的路由生成 URL。
路由组
Laravel 的路由组允许共享路由属性,常用的路由组包括中间件、命名空间、子域名路由和路由前缀。
路由模型绑定
Laravel 路由模型绑定提供了一个方便的方法自动将模型注入到路由中,可以隐式绑定,也可以显式绑定。
隐式绑定时,默认绑定 Eloquent 模型的 ID 字段。通过模型的 getRouteKeyName 方法可以自定义绑定键名。
显式绑定则是使用路由的 model 方法来为已有参数声明 class 。
0x01 路由中间件
Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。可以将中间件想象为一系列的「层」,HTTP 请求必须经过它们才会触发您的应用程序。每一层都可以检测接收的请求,甚至可以完全拒绝请求访问您的应用。
常见的中间件实例包括身份验证中间件、日志中间件、 CSRF 中间件等。多个单独的中间件还可以定义为中间件组。Laravel 带有开箱即用的 web 和 api 中间件组。
0x02 控制器
控制器能够将相关的请求处理逻辑组成一个单独的类。是在路由文件中以闭包的形式定义所有的请求处理逻辑之外的另一种形式。
资源控制器
Laravel 资源路由可以将典型的 CRUD 路由指定到一个控制器上,仅仅需要一行代码就可以实现,这大大提高了后台业务的开发效率。
以相片控制器为例,两个步骤可以定义好处理所有应用保存的相片 HTTP 请求的业务。
- 通过一行命令创建一个控制器
- 为这个控制器注册一个资源路由
资源路由的声明会创建的多个路由来处理各种各样的资源操作,这些操作都包含在控制器中了。
除了提供默认的操作外,可以根据需要对操作进行自定义。
- 可以只定义部分资源路由
- 可以重写默认的资源路由名称
- 可以重写资源路由的默认参数名称
- 可以实现资源 URI 的语言本地化
- 可以附加其他需要的资源控制器
依赖注入与控制器
Laravel 使用服务容器来解析所有的控制器。可以在控制器的构造方法中对任何依赖使用类型约束,也可以在控制器方法中使用依赖类型约束。
下一步
在下一期中,我将整理 Laravel HTTP 请求、响应及表单验证的相关知识。这些是所有网络应用最重要的部分。
思维导图在导出的过程中会变得模糊,如有需要高清的思维导图源文件,请加微信公众号:up2048,并回复“脑图”来获取。
- EOF -