必要参数
有时需要在路由中捕获到URI的一些参数。比如,需要捕获URI中的用户id,可以这样来定义路由
Route::get("user/{id}", function ($id) {
return "User ".$id;
});
也可以同时定义多个路由参数
Route::get("posts/{post}/comments/{comment}", function ($postId, $commentId) {
//
});
可以看到,路由中的参数都会被{}
来包裹。并且不能包含-
字符,如果需要可以用下划线_
来代替。
可选参数
可选参数与必要参数的形式不同在于,可选参数会在参数名的后面追加一个?
字符,如:
Route::get("user/{name?}", function ($name = null) {
return $name;
});
Route::get("user/{name?}", function ($name = "John") {
return $name;
});
正则表达式约束
可以用where
对路由参数进行格式上的约束,where
方法需要两个参数:路由参数和用来约束此参数的正则表达式
Route::get("user/{name}", function ($name) {
//
})->where("name", "[A-Za-z]");
Route::get("user/{id}", function ($id) {
//
})->where("id", "[0-9]+");
Route::get("user/{id}/{name}", function ($id, $name) {
//
})->where(["id" => "[0-9]+", "name" => "[a-z]+"]);
全局约束
如果希望某个参数一直被给定的正则来约束,除了每个路由都添加上正则表达式,还有一个一劳永逸的方法。
通过在RouteServiceProvider
里使用pattern
方法来实现
一旦使用此方式,那么所有包含这些参数的路由都会自动的应用到这种约束,在定义路由的时候就不需要where
方法了
Route::get("user/{id}", function ($id) {
// 只有当{id}为数字时才会被执行
});