Lumen 5.2 HTTP 路由入门教程

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
    });
});

时间: 2024-11-04 14:42:13

Lumen 5.2 HTTP 路由入门教程的相关文章

Lumen 5.2 HTTP 控制器入门教程

1.简介 将所有的请求处理逻辑都放在单个routes.php中肯定是不合理的,你也许还希望使用控制器类组织管理这些行为.控制器可以将相关的HTTP请求封装到一个类中进行处理.通常控制器存放在app/Http/Controllers目录中. 2.基本控制器 下面是一个基本控制器类的例子.所有的Lumen控制器应该继承自Lumen安装默认的基本控制器: <?php namespace App\Http\Controllers; use App\User; class UserController e

ASP.NET MVC 5 入门教程 (3) 路由route

原文:ASP.NET MVC 5 入门教程 (3) 路由route 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-route.html 上一节:ASP.NET MVC 5 入门教程 (2) 控制器Controller 下一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 上一节我们讲了如何创建一个控制器,本节我们来讨论如何通过路由来访问控制器及其Action.

新手必看:无线路由器设置入门教程

一.无线路由器基本 使用方法拿到手的无线路由器,连接好电源,无线路由器一般背面有5个网线插孔,其中一个颜色会与另外四个不同.如图498)this.w idth=498;' onmousewheel = 'javascript:return big(this)' alt="新手必看:无线路由器设置入门教程" width="474" height="205" src="http://images.51cto.com/files/upload

通过Ruby on Rails和docker构建微服务架构之入门教程

说到时下的架构,免不了会涉及到微服务.而谈到微服务架构,又跟容器和Docker技术脱不了关系.虽然容器和Docker并不完全是一回事,但两者是密不可分的,而且二者之间也有共同之处:在大型复杂应用的构建和运营方面,二者都可以大大提高企业的效率.   微服务可不像一般的应用,可以通过apt-get工具进行安装,大家可能会问了:我们该如何才能像安装应用一样实现这种服务呢?在很大的程度上,这个问题的答案是否定的,我们无法轻松实现这种服务.更准确的说,至少目前我们还无法实现.在一个系统中,最难修改的就是架

Windows系统下Node.js的简单入门教程

  这篇文章主要介绍了Windows系统下Node.js的简单入门教程,Node.js是用于后端编程的JavaScript框架,需要的朋友可以参考下 随着近日Paypal和Netflix宣告 迁移到Node.js, 服务器端Javascript平台已经证明其自身在企业领域的价值. 这对于Node来说是一小步,对于Javascript而言却是一大跨越啊! 来自.NET, Java, PHP, Ruby on Rails和更多技术领域的程序员, 所有游走于服务器端的编码者都会聚集到这个平台上. 作为

高性能PHP框架Symfony2中文入门教程

最近,出于对Symfony2的关注,在网上闲逛时不时会留意Symfony2的文章,尤其是中文方面的.前段时间拜读了一饼兄的<Symfony2入门>一文,觉得比官网上的例子涉及面更广便做了转载.今日有暇细读,却发现一饼兄只是大体对Symfony2做了介绍,如果参照该文来入门的话,却是存在很大的问题,于是便有了这一篇文章. 下载 首先是下载Symfony2,这个简单,到 http://symfony.com/download或者本站下载.本人由于使用的是Ubuntu系统,所以下了个.tgz的,然后

Phalcon入门教程之控制器

原文发表于:Phalcon入门教程之控制器 控制器在MVC分层中的主要作用是处理请求与响应.Phalcon中的控制器类必须以" Controller "为后缀,action则以" Action "为后缀. " Phalcon\Mvc\Controller "是Phalcon中控制器的基类,我们写的控制器类通过继承此基类,可以调用在DI中注册的各种服务.一个简单的控制器类示例如下: namespace Marser\App\Frontend\Con

ASP.NET MVC 5 入门教程 (4) View和ViewBag

原文:ASP.NET MVC 5 入门教程 (4) View和ViewBag 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-view.html 上一节:ASP.NET MVC 5 入门教程 (3) 路由Route 下一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 源码下载:点我下载 View(视图)用来显示被controller处理好的数据.本节

AngularJS入门教程之更多模板详解_AngularJS

在这一步,你将实现手机详细信息视图,这个视图会在用户点击手机列表中的一部手机时被显示出来. 请重置工作目录: git checkout -f step-8 现在当你点击列表中的一部手机之后,这部手机的详细信息页面就会被显示出来. 为了实现手机详细信息视图我们将会使用$http来获取数据,同时我们也要增添一个phone-detail.html视图模板. 步骤7和步骤8之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 数据 除了phones.json,app/phones/目录也包