【lumentum】Lumen 5.2 HTTP 路由入门教程

时间:2020-09-28  来源:redis  阅读:

1、基本路由

所有路由都定义在app/Http/routes.php中。最基本的 Lumen 路由接收一个 URI 和一个闭包:

$app->get("foo", function () {
    return "Hello World";
});
$app->post("foo", function () {
    //
});

有效的路由方法

路由器允许你注册响应任何HTTP动作的路由:

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

2、路由参数

必选参数

有时我们需要在路由中捕获URI片段,比如,如果想要从URL中捕获用户ID,可以通过如下方式定义路由参数:

$app->get("user/{id}", function ($id) {
    return "User ".$id;
});
可以按需要定义在路由中定义多个路由参数:

$app->get("posts/{post}/comments/{comment}", function ($postId, $commentId) {
    //
});

路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包。

注意:路由参数不能包含’-‘字符,需要的话可以使用_替代。

3、命名路由

命名路由使生成URL或者重定向到指定路由变得很方便,在定义路由时指定路由名称,然后使用数组键as指定路由别名:

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

还可以为控制器动作指定路由名称:

$app->get("profile", [
    "as" => "profile", "uses" => "UserController@showProfile"
]);
生成指向命名路由的URL

一旦你为给定路由分配了名字,通过route函数生成URL时就可以使用路由名字:

$url = route("profile");
$redirect = redirect()->route("profile");
如果路由定义了参数,可以将路由参数作为第二个参数传递给route函数。给定的路由参数将会自动插入URL中:

$app->get("user/{id}/profile", ["as" => "profile", function ($id) {
    //
}]);
$url = route("profile", ["id" => 1]);

4、路由分组

路由分组允许我们在多个路由中共享路由属性,比如中间件和命名空间等,这样的话一大波共享属性的路由就不必再各自定义这些属性。共享属性以数组的形式被作为第一个参数传递到$app->group方法中。

要了解更多路由分组,下面我们通过几个简单的应用实例来展示其特性。

4.1 中间件

要分配中间件给分组中的所有路由,可以在分组属性数组中使用middleware键。中间件将会按照数组中定义的顺序依次执行:

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

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

4.2 命名空间

另一个通用的例子是路由分组分配同一个PHP命名空间给多个控制器,可以在分组属性数组中使用namespace参数来指定分组中控制器的命名空间:

$app->group(["namespace" => "Admin"], function() use ($app){
    // 控制器在 "App\Http\Controllers\Admin" 命名空间下

    $app->group(["namespace" => "User"], function()
    {
        // 控制器在 "App\Http\Controllers\Admin\User" 命名空间下
    });
});

默认情况下,RouteServiceProvider包含routes.php并指定其所在命名空间为App\Http\Controllers,因此,我们只需要指定App\Http\Controllers之后的相对命名空间即可。

4.3 路由前缀

属性prefix可以用来为分组中每个给定URI添加一个前缀,比如,你想要为所有路由URI前面添加前缀admin:

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

你还可以使用prefix参数为分组路由指定公共参数:

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

【lumentum】Lumen 5.2 HTTP 路由入门教程

http://m.bbyears.com/shujuku/101472.html

推荐访问:lumens lumene lumenrt lumenis lumen框架 lumentum是什么公司
相关阅读 猜你喜欢
本类排行 本类最新