路由参数

必选参数
路由参数需要通过花括号 {} 进行包裹并且是拼音字母,这些参数在路由被执行时会被传递到路由的闭包。路由参数名称不能包含 - 字符,如果需要的话可以使用 _ 替代,比如如果某个路由参数定义成 {post-id} 则访问路由会报错,应该修改成 {post_id} 才行。路由参数被注入到路由回调/控制器取决于它们的顺序,与回调/控制器名称无关。
可选参数
有必选参数就有可选参数,这可以通过在参数名后加一个 ? 标记来实现,这种情况下需要给相应的变量指定默认值,当对应的路由参数为空时,使用默认值:

这时如果定义的路由是下面这个的话,访问 http://blog.dev/user 会返回 John
正则约束
可以通过路由实例上的 where 方法来约束路由参数的格式。where 方法接收参数名和一个正则表达式来定义该参数如何被约束:

使用正则约束还有一个好处就是避免了 user/{id} 和 user/{name} 的混淆。
全局约束
如果想要路由参数在全局范围内被给定正则表达式约束,可以使用 pattern 方法。需要在 RouteServiceProvider 类的 boot 方法中定义这种约束模式:

一旦模式被定义,将会自动应用到所有包含该参数名的路由中:

除此之外,该模式还会被应用到诸如下面这些路由参数上:

很显然这种方式让代码更简洁,也为我们实现同一参数统一约束带来了方便。