如何使用Mezzio -> 会话

问题描述 投票:0回答:1

我将 session 和 session-ext 包添加到 Mezzio 项目中。

之后我收到错误:

函数 Mezzio\Session\SessionMiddleware::__construct() 的参数太少,第 57 行 /var/www/mezzio/vendor/mezzio/mezzio/src/MiddlewareContainer.php 中传递了 0 个参数,而预期恰好为 1 个参数

我发现 mezzio-session 使用 Zend-session 并尝试安装 Zend-session,但这也给了我一个错误:

  • mezzio/mezzio-session-ext 已锁定到版本 1.12.0,并且未请求更新此软件包。
  • mezzio/mezzio-session 1.6.0 与 zendframework/zend-expressive-session 1.3.0 冲突。
  • mezzio/mezzio-session-ext 1.12.0 需要 mezzio/mezzio-session ^1.4 -> 可满足 mezzio/mezzio-session[1.6.0]。
  • 根composer.json需要zendframework/zend-expressive-session ^1.3 -> 可满足zendframework/zend-expressive-session[1.3.0]。

如何在 Mezzio 项目中使用 mezzio-session 和 -session-ext?

更新1:

我在路线管道中使用

SessionMiddleware::class
的路线上遇到此错误,如此处所述:

use Mezzio\Authentication\OAuth2;
use Mezzio\Session\SessionMiddleware;

$app->route('/oauth2/authorize', [
    SessionMiddleware::class,

    OAuth2\AuthorizationMiddleware::class,

    // The following middleware is provided by your application (see below):
    App\OAuthAuthorizationMiddleware::class,

    OAuth2\AuthorizationHandler::class
], ['GET', 'POST']);
session zend-framework mezzio
1个回答
0
投票

您不应该使用任何旧的 Zend* 软件包。你应该只需要运行

composer require mezzio-session-ext

*-ext 包需要 mezzio-session。没有其他必需的包。删除已安装的 Zend 框架包。

  1. 如果您不使用 laminas 组件安装程序包,您将需要编辑 /config/config.php 并为两个包 ConfigProvider 类添加条目,以便它们的自动装配能够工作。

  2. 您需要通过管道传输 SessionMiddleware 在 pipeline.config 中

    $app->pipe(\Mezzio\Session\SessionMiddleware::class);

您可以在此处找到更多信息和示例: https://docs.mezzio.dev/mezzio-session/middleware/#configuration

中间件通过管道传输后,有多种方法可以访问会话数据。使用哪种方法来检索会话数据将取决于您。有4种方法(据我所知):

$session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);

$session = $request->getAttribute(SessionInterface::class);

SessionRetrieval::fromRequest($request);

SessionRetrieval::fromRequestOrNull($request);

© www.soinside.com 2019 - 2024. All rights reserved.