HTTP 路由

未匹配的标注
本文档最新版为 6.x,旧版本可能放弃维护,推荐阅读最新版!

HTTP 路由

基本路由

你可以在 routes/web.php 文件中定义应用的所有路由。 最基本的 Lumen 路由只需要一个 URI 和一个 闭包

$router->get('foo', function () {
    return 'Hello World';
});

$router->post('foo', function () {
    //
});

可用的路由方法

我们可以注册路由来响应所有的 HTTP 方法:

$router->get($uri, $callback);
$router->post($uri, $callback);
$router->put($uri, $callback);
$router->patch($uri, $callback);
$router->delete($uri, $callback);
$router->options($uri, $callback);

路由参数

必填参数

当然,有时你会需要从路由中获取一些 URI 片段。例如,从 URL 中获取用户的 ID,那么你就可以通过定义路由参数来执行此操作:

$router->get('user/{id}', function ($id) {
    return 'User '.$id;
});

你也可以根据需要在路由中定义多个参数:

$router->get('posts/{postId}/comments/{commentId}', function ($postId, $commentId) {
    //
});

路由参数通常会被放在 {} 中。当路由执行时,这些参数会被传递到路由的 闭包 中。

注意: 路由参数不能包含 - 字符。请用下划线(_)替换。

可选参数

在定义 URI 时由 [...] 所包裹起来的部分叫做可选路由参数。例如: /foo[bar] 将会匹配到 /foo/foobar 两种路由。可选参数路由仅支持在 URI 末尾使用。换而言之,你不能在定义路由时将可选参数放到中间:

$router->get('user[/{name}]', function ($name = null) {
    return $name;
});

正则表达式约束

你可以通过在路由定义中使用正则表达式来约束路由参数的格式:

$router->get('user/{name:[A-Za-z]+}', function ($name) {
    //
});

命名路由

命名路由可以方便的为特定路由生成 URL 或进行重定向。你可以使用 as 数组键指定名称到路由上:

$router->get('profile', ['as' => 'profile', function () {
    //
}]);

你还可以指定控制器行为的路由名称:

$router->get('profile', [
    'as' => 'profile', 'uses' => 'UserController@showProfile'
]);

对命名路由生成 URLS

一旦你给路由分配了名字,则可以通过使用 route 函数来使用路由名称生成 URLS 或重定向:

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');

如果路由定义了参数,那么你可以把参数作为第二个参数传递给 route 方法。指定的参数将自动加入到 URL 中:

$router->get('user/{id}/profile', ['as' => 'profile', function ($id) {
    //
}]);

$url = route('profile', ['id' => 1]);

路由群组

路由群组允许你共享路由属性,例如:中间件或者命名空间,可以通过路由组为多个路由设置统一属性。共用属性以数组的形式,作为 $router->group 函数的第一个参数。

为了了解跟多路由组的先关内容,我们将通过几个常用样例来了解这些特性。

中间件

指定中间件到路由组中的所有路由中,则可以在群组属性数组里使用 middleware 参数。中间件则会按照列表中的顺序依次执行:

$router->group(['middleware' => 'auth'], function () use ($router) {
    $router->get('/', function ()    {
        // 使用 Auth 中间件
    });

    $router->get('user/profile', function () {
        // 使用 Auth 中间件
    });
});

命名空间

路由群组的另一个常见用例是将相同的 PHP 命名空间分配给一组控制器。 你可以使用路由群组属性数组中的 namespace 参数来指定群组中所有控制器的命名空间:

$router->group(['namespace' => 'Admin'], function() use ($router)
{
    // 使用 "App\Http\Controllers\Admin" 命名空间...

    $router->group(['namespace' => 'User'], function() use ($router) {
        // 使用 "App\Http\Controllers\Admin\User" 命名空间...
    });
});

路由前缀

通过路由群组数组属性中的 prefix, 可以用来给路由群组中的每个路由添加一个指定的 URI 前缀。例如,你可能希望将路由群组中的所有路由 URIs 加上 admin 前缀:

$router->group(['prefix' => 'admin'], function () use ($router) {
    $router->get('users', function ()    {
        // 匹配 "/admin/users" URL
    });
});

你也可以使用 prefix 参数为路由群组指定通用参数:

$router->group(['prefix' => 'accounts/{accountId}'], function () use ($router) {
    $router->get('detail', function ($accountId)    {
        // 匹配 "/accounts/{accountId}/detail" URL
    });
});

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/lumen/5.5/http-...

译文地址:https://learnku.com/docs/lumen/5.5/http-...

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:7
讨论数量: 0
发起讨论 只看当前版本


暂无话题~