Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
SessionMiddleware
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 3
12
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 __invoke
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getSessionContainer
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
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}