0

我已经安装了以下作曲家包:

"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 包“粘合”在一起。不幸的是,我在调度程序之外找不到任何关于如何从这些中间件中使用每个库的信息。Access Logging 和 Routing 等基本功能已经可以正常工作。

我集成了 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 类并在该类上设置变量,但它不起作用。或者我是否必须在一起调度中间件之前设置所有会话?但是它们又是如何融入其中的呢?

4

1 回答 1

1

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

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);
    }
}
于 2016-06-26T14:26:42.673 回答