请求上下文

    目录

    请求上下文(Request Context)是一个保存了当前请求相关信息的容器,它可以在一个请求的生命周期内被使用,可以用来获取当前请求的相关信息,如请求的 URI、请求参数、响应信息等。

    在 imi 中,请求上下文的实现是基于 Swoole 协程上下文(Coroutine Context)的,因此在 Swoole 环境下,请求上下文实际上就是协程上下文。而在非 Swoole 环境下,如 PHP-FPM,请求上下文则是一个全局上下文对象。

    无论在哪个环境中,使用请求上下文都需要通过 Imi\RequestContext 类来获取。

    上下文中容器操作

    $object = \Imi\RequestContext::getBean('XXX');
    $object = \Imi\RequestContext::getServerBean('XXX');
    $object = \Imi\RequestContext::newInstance('XXX');
    
    $container = \Imi\RequestContext::getContainer();
    $object = $container->get('XXX');

    上下文中的数据存储

    获取上下文对象

    // @var ArrayObject $cxt
    $cxt = \Imi\RequestContext::getContext();

    在上下文中存取值

    \Imi\RequestContext::get('myKey', 'default');
    \Imi\RequestContext::set('myKey', '123456');
    \Imi\RequestContext::unset('myKey');

    批量在上下文中设置值

    \Imi\RequestContext::muiltiSet([
        'myKey1' => '123456',
        'myKey2' => '456789',
        'myKey3' => '123456',
    ]);

    在闭包中获取上下文操作并返回值

    // 返回`123`
    $result = \Imi\RequestContext::use(function (ArrayObject $cxt) {
        $cxt['myKey2'] = '789';
        unset($cxt['myKey3']);
    
        return '123';
    });

    执行一个闭包并再上下文中记住其返回值

    // 返回值`3`并写入上下文中存储
    $result = \Imi\RequestContext::remember('myKey3', function () {
        return 1 + 2;
    });