Laravel 的路由定义在 routes 目录下,默认提供了三个文件,console.php、api.php、web.php,分别对应了控制台模式、api 模式和 web 网站三种不同模式下的路由使用。
Laravel 的路由支持任意一种 HTTP 请求方式,GET、POST、PUT、PATCH、DELETE、OPETIONS。
基本路由
只响应一个 URI 请求的路由形式。
Route::get('hello', function (){
return 'Hello Laravel';
})
这是一个最简单的🌰,通过一个匿名函数来响应了请求,正常情况下我们会将请求的响应函数封装到一个 Controller 中,然后在此处进行配置。
可以通过注册路由来响应任何的 HTTP 请求,GET、POST、PATCH、PUT、DELETE、OPTIONS。
如果需要注册路由来响应多个 HTTP 请求,可以使用 match 或 any 方法。
// 响应 get 和 post 请求
Route::match(['get', 'post'], '/', function () {
//
});
// 响应任意一种请求
Route::any('foo', function () {
//
});
路由参数
在路由定义中可以设置自定义参数,用户输入的 URL 信息根据路由拆解后,将匹配参数的内容传递到回调函数中。路由参数又分为必选参数和可选参数,前者是必须完全一致匹配的,后者则不一定存在,需要提供默认参数,形式如下:
// 使用必选参数
Route::get('user/{id}', function ($userId){
return 'User-' . $userId;
});
// 使用可选参数
Route::get('user/{name?}', function ($name = null){
return 'User name is ' . $name;
});
使用路由参数的方式可以使得一个路由能够匹配多个 URL。
可以使用正则来对路由参数进行限制。
// 参数 id 只能是数字,不能是其他字符
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');
命名路由
顾名思义,就是给路由起一个易于理解也易于使用的名字,为生成 URL 和重定向提供便利。
Route::get('user/profile', function (){
return 'User Profile';
})->name('profile');
分组路由
分组路由可以为同组的路由提供相同的中间件或命名空间等共享属性,无需再为每个路由单独指定。
// 指定中间件,可以指定多个
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// 使用 Auth 中间件
});
Route::get('user/profile', function () {
// 使用 Auth 中间件
});
});
// 指定命名空间
Route::group(['namespace' => 'Admin'], function(){
// 控制器在 "App\Http\Controllers\Admin" 命名空间下
Route::group(['namespace' => 'User'], function(){
// 控制器在 "App\Http\Controllers\Admin\User" 命名空间下
});
});
// 指定路由前缀
Route::group(['prefix' => 'admin'], function () {
Route::get('users', function () {
// 匹配 "/admin/users" URL
});
});
网友评论