对Slim 框架进行总结 一

导读:今天我们来看看中间件的相关功能

中间件

Slim中的中间件分两种:应用级中间件、路由级中间件。

应用中间件基于Rack协议实现,可以在应用对象调用之前或之后检查、分析、或修改应用环境变量、请求对象、响应对象。

每个中间件类都继承自抽象类Middleware,且需要实现其抽象方法call。所有注册的中间件组成一个中间件栈,其结构类似于一个洋葱,先注册的中间件在里层,后注册的在外层,最里层的是应用对象自身,请求从外到里逐层进行处理,任何一层都可以根据条件直接响应请求或递归调用往里一层/下一个中间件。

以中间件SessionCookie与MethodOverride为例,其call方法实现如下所示:

// 中间件SessionCookie
public function call()
{
    // 加载session数据
    $this->loadSession();
    // 调用下一个中间件
    $this->next->call();
    // 保存session数据
    $this->saveSession();
}

// 中间件MethodOverride
public function call()
{
    $env = $this->app->environment();
    if (isset($env['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
        // Header commonly used by Backbone.js and others
        $env['slim.method_override.original_method'] = $env['REQUEST_METHOD'];
        $env['REQUEST_METHOD'] = strtoupper($env['HTTP_X_HTTP_METHOD_OVERRIDE']);
    } elseif (isset($env['REQUEST_METHOD']) && $env['REQUEST_METHOD'] === 'POST') {
        // HTML Form Override
        $req = new \Slim\Http\Request($env);
        // $this->settings['key'] 默认为_METHOD
        $method = $req->post($this->settings['key']);
        if ($method) {
            $env['slim.method_override.original_method'] = $env['REQUEST_METHOD'];
            
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值