antidot-fw/session

Antidot 框架会话库

0.2.0 2021-02-05 21:14 UTC

This package is auto-updated.

Last update: 2024-08-30 01:06:11 UTC


README

link-packagist Scrutinizer Code Quality Infection MSI Code Coverage type-coverage Build Status

PSR-15 中间件,允许在请求属性中拥有会话。

安装

使用 composer 安装,默认使用 Aura Session 的实现。

composer require antidot-fw/session

配置

使用 Antidot 框架入门,添加中间件到管道后即可使用。您还可以使用 PSR-11 容器在任何 PSR-15 兼容的中间件管道中使用它。

<?php

$sessionFactory = new AuraSessionFactory();
$sessionMiddleware = new SessionMiddleware($sessionFactory($container));

将其添加到您的管道中

<?php

use Antidot\Application\Http\Application;
use Antidot\Application\Http\Middleware\RouteDispatcherMiddleware;
use Antidot\Session\Application\Http\Middleware\SessionMiddleware;
...

return static function (Application $app) : void {
    $app->pipe(...);
    $app->pipe(SessionMiddleware::class); // added here
    $app->pipe(RouteDispatcherMiddleware::class);
    ...
};

用法

会话将存储为请求属性,例如使用请求处理器,它也将在中间件中可用。

<?php
// src/Handler/SomeHandler.php

declare(strict_types=1);

namespace App\Handler;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response\HtmlResponse;

class SomeHandler implements RequestHandlerInterface
{

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        /** @var \Antidot\Session\Application\Http\SessionSegment $session */
        $session = $request->getAttribute('session');

        $session->set('foo', 'bar');
        $session->set('baz', 'dib');
        $message = $session->get('foo'); // 'bar'
        $message = $session->get('baz'); // 'dib'
        $session->setFlash('message', 'Hello world!');
        $message = $session->getFlash('message'); // 'Hello world!'
        ...
    }
}

添加自定义会话实现

要为您的自定义会话创建包装器,您需要实现 Antidot\Session\Application\Http\SessionSegmentAntidot\Session\Application\Http\SessionSegmentFactory 两个类,请参阅 Antidot\Session\Infrastructure\AuraSessionSegmentAntidot\Session\Infrastructure\AuraSessionSegmentFactory

<?php

declare(strict_types=1);

namespace Antidot\Session\Application\Http;

interface SessionSegment
{
    public function get(string $identity);
    public function getFlash(string $identity);
    public function set(string $identity, $value): void;
    public function setFlash(string $identity, $value): void;
}
<?php

declare(strict_types=1);

namespace Antidot\Session\Application\Http;

use Psr\Http\Message\ServerRequestInterface;

interface SessionSegmentFactory
{
    public function __invoke(ServerRequestInterface $request): SessionSegment;
}