资讯专栏INFORMATION COLUMN

lumen5.5学习路由和中间件(四)

1fe1se / 3126人阅读

摘要:想要做到这一点,你需要定义中间件为。如果你希望在及方法被调用时使用一致的中间件实例,只需在容器中使用容器的方法注册中间件以上就是路由和中间件的学习,最后那那其实理解得有点虚,有错记得指出修正,谢谢

前几篇了解完从请求到响应的流程后,仔细学习下路由和中间件的玩法

----------------------------------分割线--------------------------------

路由

基本用法可以参考中文文档的路由,要注意的是
1)$app要换成$route
2)namespace不需要写全,5.5新版本会自动把前面的那部分补全
上一下基本例子:

//当路由为api.com/index.php/user/1/hano/2时,
//由ExampleController的show方法响应请求
$router->get("user/{id}/{name}/{sex}", "ExampleController@show");

//as键值对可以对此路由进行命名,uses指定响应操作
//as的作用有利于生成重定向的URL:redirect()->route("profile");
//middlerware中间件提供了一个方便的机制来过滤进入应用程序的 HTTP 请求
**使用中间件要先在app.php中打开routeMiddleware代码的注释进行注册中间件**
// $app->routeMiddleware([
//     "auth" => AppHttpMiddlewareAuthenticate::class,
//     "validate" => AppHttpMiddlewarevalidateMiddle::class,
//     "before" => AppHttpMiddlewareeforeMiddle::class,
//     "after" => AppHttpMiddlewareafterMiddle::class,
// ]);
$router->get("getUrl/{str}", [
    "as" => "profile", 
    "uses" => "ExampleController@getUrl",
    "middleware" => "auth" 
]);

//路由群组可以为多个路由设置共同属性,而不需在每个路由上都设置一次
//namespace命名空间将匹配到的路由给到AppHttpControllersUser下的控制器处理
//prefix路由前缀匹配到的路由为api.com/index.php/admin/{路由名称}
//middleware此组路由都会先经过validate中间件
$router->group([
    "namespace" => "User", 
    "prefix" => "admin",   
    "middleware => "validate" 
],function() use ($router) {
    $router->get("getUserInfo/{user_id}", [
        "as" => "getUserInfo",
        "uses" => "UserController@getUserInfo"
    ]);
   
    $router->post("updateUserInfo/{user_id}", [
        "as" => "updateUserInfo",
        "uses" => "UserController@updateUserInfo"
    ]);
});

中间件

中间件文件都放在app/http/Middleware文件夹中,可以根据ExampleMiddleware.php进行创建
中间件分前置和后置两种

前置中间件
namespace AppHttpMiddleware;

use Closure;

class BeforeMiddleware
{
    //第三个参数为额外传参
    public function handle($request, Closure $next, $name)
    {
        //前置中间件,在执行路由定义指定的操作前做你想做的事情
        var_dump($name);

        return $next($request);
    }
}
后置中间件

路由可指示多个中间件,用数组形式表达
附加的中间件参数将会在 $next 参数之后被传入中间件,用法:

//在路由中使用冒号 : 来区隔中间件名称与指派参数,多个参数可使用逗号作为分隔
$router->get("getUrl/{str}", [
    "as" => "profile", 
    "uses" => "ExampleController@getUrl",
    "middleware" => ["before:hano","after:hano"] //hano将为$name的值
]);
全局中间件

每个 HTTP 请求都经过一个中间件,只要将中间件的类加入到 bootstrap/app.php 的 $app->middleware() 调用参数数组中。

$app->middleware([
   AppHttpMiddlewareAuthenticate::class,
]);

Terminable中间件

有些时候中间件需要在 HTTP 响应被发送到浏览器之后才运行,例如,「session」中间件存储的 session 数据是在响应被发送到浏览器之后才进行写入的。想要做到这一点,你需要定义中间件为「terminable」。


terminate 方法必须接收请求($request)及响应($response)两个参数。一旦定义了 terminable 中间件,你便需要将它增加到 bootstrap/app.php 文件的全局中间件清单列表中。

$app->middleware([
   AppHttpMiddlewareAuthenticate::class,
   AppHttpMiddleware	erminable::class,
]);

当在你的中间件调用 terminate 方法时,Lumen 会从 服务容器 解析一个全新的中间件实例。

如果你希望在 handle 及 terminate 方法被调用时使用一致的中间件实例,只需在容器中使用容器的 singleton 方法注册中间件

$app->singleton(
    AppHttpMiddleware	erminable::class 
);

以上就是路由和中间件的学习,最后那terminable那part其实理解得有点虚,有错记得指出修正,谢谢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26200.html

相关文章

  • lumen5.5学习(三)

    摘要:接着上篇分割线是的实例,但是文件中找不到方法在类内部看到,打开找到了方法,方法注释写的是主要用于运行应用以及发送响应主要看方法 接着上篇$app->run();--------------------分割线------------------------ $app是Application的实例,但是Application.php文件中找不到run方法在类内部看到use Concerns...

    svtter 评论0 收藏0
  • lumen5.5学习(二)

    摘要:继续学习分割线看看是怎么输出这个数据目录下的加载了下的的自动加载加载的配置初始化应用初始化的内容指定项目基础目录注册服务容器注册异常处理实例 继续学习lumen5.5 -----------------------分割线----------------------- 看看是怎么输出Lumen (5.5.2) (Laravel Components 5.5.*)这个数据 public目录...

    shengguo 评论0 收藏0
  • lumen5.5学习(一)

    摘要:最近在学习框架写接口,记忆力比较差所以顺便写下笔记分割线因为直接学最新版的所以,记得开启的,,扩展还有可以用的打开命令 最近在学习lumen框架写API接口,记忆力比较差所以顺便写下笔记~ -----------------------------分割线-------------------------------- 因为直接学最新版的所以,PHP >=7.0记得开启php.ini的o...

    mindwind 评论0 收藏0
  • windows下laravel5.5手写教程1(适合初学者)

    摘要:打开浏览器输入,如无意外,将出现如下图,表示框架安装成功。四系统内部后台管理系统这个是框架自带的后台登录管理系统,只需要简单的命令即可运行。出现上图即为,创建模型成功。 在PHP个各种web开发框架中,laravel算是一款简洁、优雅的开发框架,本人也刚刚接触到laravel,通过学习大神们的一些文章,下面是我的一些心得体会,希望可以给初学者一些帮助,大家一起进步。言归正传: 本人环境...

    GeekGhc 评论0 收藏0
  • 【Node Hero】4. 第一个 Node.js HTTP 服务器

    摘要:本文转载自众成翻译译者网络埋伏纪事链接原文本章我会指导你启动一个简单的服务器,并开始为请求服务。现在,我们开始创建第一个服务器我们将模块,并将服务器绑定到端口来监听。必须用如下方式启动服务器总结本章学习了如何从头开始创建第一个服务器。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1750原文:https://blog.risings...

    Coly 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<