我如何在PHP中使用PSR7中间件

时间:2016-06-25 15:53:24

标签: php middleware psr-7 auraphp

我安装了以下作曲家包:

"require": {
 "beatswitch/lock": "0.2.0",
 "league/event": "2.1.2",
 "oscarotero/psr7-middlewares": "v3.16.1",
 "pdepend/pdepend": "2.2.4",
 "sebastian/phpcpd": "2.0.4",
 "instaclick/php-code-sniffer": "1.4.2",
 "phploc/phploc": "3.0.1",
 "phpmd/phpmd": "2.4.3",
 "phpunit/phpunit": "5.5.x-dev",
 "phpunit/phpunit-selenium": "3.0.2",
 "league/route": "3.x-dev",
 "guzzlehttp/psr7": "1.3.0",
 "relay/relay": "2.x-dev",
 "monolog/monolog": "2.0.x-dev",
 "aura/session": "3.x-dev"

}

现在我想用psr7-middlewares软件包“粘合”这些软件包。不幸的是,我找不到任何关于如何使用调度程序之外的这些中间件的每个库的信息。访问记录和路由等基本功能已经没有问题。

我整合了Aura Sessions,如下所示:

Middleware::AuraSession(),
    ->factory(new Aura\Session\SessionFactory) //(optional) Intance of Aura\Session\SessionFactory
    ->name('my-session-name'), //(optional) custom session name

function ($request, $response, $next) {
    //Get the session instance
    $session = AuraSession::getSession($request);

    return $response;
}

这与Relayphp和Guzzle \ Http消息接口完全一致。转储会话变量给我带有空值的基本会话数据,因为我没有设置任何内容。

不幸的是,我找不到任何易于理解的有关如何在中间件系统中设置Session的信息。最后,我得到了一个响应,可以得到它的身体和标题,但不是更多。

如何访问中间件阵列中设置的功能?我还尝试使用AuraSession类并在该类上设置变量,但它不起作用。或者我必须在将中间件一起分发之前设置所有会话?但是他们如何融入其中呢?

1 个答案:

答案 0 :(得分:1)

我忽略了我可以在匿名函数中设置Sessions,我必须在我的中间件列表中实现,如前所述(但是没有意识到),所以我想在用户登录时创建一个Session ,使用Aura Session和PSR7-Middleware,它可能如下所示:

function ($request, $response, $next) {
    //Get the session instance
    $session = AuraSession::getSession($request);

    $auth = new server\modules\authentication;

    $auth->setUserSession($request, $session);

    return $response;
}

方法 setUserSession 可以是:

public function setUserSession ($request, $session) {
    $segment = $session->getSegment(get_called_class());
    if ($this->loggedIn && $segment->get('logged_in', false)) {
        $segment->set('logged_in', true);
    }
}