Lines 0.00% 0 / 11
Functions and Methods 0.00% 0 / 3
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
SessionMiddleware 0.00% 0 / 11 0.00% 0 / 3 12 0.00% 0 / 1
 __construct 0.00% 0 / 3 0.00% 0 / 1 2
 __invoke 0.00% 0 / 5 0.00% 0 / 1 2
 getSessionContainer 0.00% 0 / 3 0.00% 0 / 1 2
1<?php
2
3namespace BO\Slim\Middleware;
4
5use Psr\Http\Message\ServerRequestInterface;
6use Psr\Http\Message\ResponseInterface;
7use Psr\Http\Server\RequestHandlerInterface;
8
9class SessionMiddleware
10{
11    const string SESSION_ATTRIBUTE = 'session';
12
13    protected string $sessionName;
14
15    protected ?object $sessionClass = null;
16
17    /** @psalm-api Instantiated by Slim middleware registration. */
18    public function __construct(string $name = 'default', ?object $sessionClass = null)
19    {
20        session_name($name);
21        $this->sessionName = $name;
22        $this->sessionClass = $sessionClass;
23    }
24
25    public function __invoke(
26        ServerRequestInterface $requestInterface,
27        RequestHandlerInterface $next
28    ): ResponseInterface {
29        $sessionContainer = Session\SessionHuman::fromContainer(function () use ($requestInterface) {
30            return $this->getSessionContainer($requestInterface);
31        });
32
33        $requestInterface = $requestInterface->withAttribute(self::SESSION_ATTRIBUTE, $sessionContainer);
34        return $next->handle($requestInterface);
35    }
36
37    public function getSessionContainer(ServerRequestInterface $request): Session\SessionData
38    {
39        $session = Session\SessionData::getSession($request);
40        $session->setEntityClass($this->sessionClass);
41        return $session;
42    }
43}