我将 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 和 -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']);
您不应该使用任何旧的 Zend* 软件包。你应该只需要运行
composer require mezzio-session-ext
*-ext 包需要 mezzio-session。没有其他必需的包。删除已安装的 Zend 框架包。
如果您不使用 laminas 组件安装程序包,您将需要编辑 /config/config.php 并为两个包 ConfigProvider 类添加条目,以便它们的自动装配能够工作。
您需要通过管道传输 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);