本篇博客记录了Laravel的路由相关知识点,路由是非常重要的部分。
基本的路由
最基本的路由是接收一个URI和闭包:
|
|
所有的路由都是定义在路由文件中,位于routes
目录下,路由文件会被框架自动加载。routes/web.php
文件为web接口定义了路由,这些路由被分配给web
中间件组(提供了session状态和CSRF保护)。routes/api.php
文件中的路由是无状态的,会被分配给api
中间件组。
路由器可以让你注册对应的路由来响应任何的HTTP动词。
|
|
可以使用match
方法注册路由来响应多个HTTP动词,或者使用any
方法注册路由来响应任何HTTP动词。
|
|
指向web
路由文件中路由的HTML表单应该包含一个CSRF token域,否则的话,请求会被拒绝。
路由参数
如果需要从路由中获取URI的片段,可以定义路由参数:
|
|
可以定义许多路由参数,路由参数总是包含在大括号里,路由参数会基于顺序被注入到路由回掉或控制器中。
|
|
如果需要声明一个路由参数是可选的,可以在参数名后面放一个问号,并且该参数对应的变量值要有一个默认值。
|
|
可以使用路由实例的where
方法来约束路由参数的格式,该方法接收参数的名称和约束参数的正则表达式。
|
|
如果想要一个路由参数总是被给定的正则表达式约束(全局约束),那么可以使用pattern
方法。应该在RouteServiceProvider
的boot
方法里定义这些pattern
方法。
|
|
命名的路由(路由的别名)
命名的路由可以方便产生URL或重定向到特定的路由,可以调用name
方法来为路由声明一个名字。
|
|
一旦为给定的路由分配了名字,可以通过全局的route
函数来产生URL或重定向。
|
|
如果命名的路由定义了参数,则将其作为第二个参数传递给route
函数。给定的参数会被自动插入到URL中。
|
|
如果想要判断当前的请求是否到达指定的命名路由,可以调用Route实例的named
方法。
|
|
路由组
路由组可以在许多路由中共享路由属性,例如中间件或命名空间,而不必单个来定义这些属性。
为了分配中间件(middleware
)给路由组中的所有路由,可以在定义路由组前使用middleware
方法。
|
|
路由组的另一个常见用法是为一组控制器分配相同的PHP命名空间,使用namespace
方法。
|
|
prefix
方法可以用来为路由组中的每个路由添加前缀。
|
|
路由模型绑定
表单方法”伪造”
HTML表单不支持PUT
、PATCH
和DELETE
动作,为了让表单能够调用这些路由,需要向表单添加隐藏的_method
域,对应的值就是HTTP请求方法。
|
|
可以使用method_field
辅助方法来产生_method
元素:
|
|
获取当前路由
可以使用Route
facade来获取正在处理的请求的路由信息。
|
|