Skip to content

Commit fe9a87f

Browse files
milodg
authored andcommitted
SessionExtension: added option handler to pass own SessionHandlerInterface (#146)
1 parent 3e9c8d5 commit fe9a87f

2 files changed

Lines changed: 55 additions & 1 deletion

File tree

src/Bridges/HttpDI/SessionExtension.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class SessionExtension extends Nette\DI\CompilerExtension
2121
'debugger' => false,
2222
'autoStart' => 'smart', // true|false|smart
2323
'expiration' => null,
24+
'handler' => null,
2425
];
2526

2627
/** @var bool */
@@ -49,6 +50,9 @@ public function loadConfiguration()
4950
if ($config['expiration']) {
5051
$session->addSetup('setExpiration', [$config['expiration']]);
5152
}
53+
if ($config['handler']) {
54+
$session->addSetup('setHandler', [$config['handler']]);
55+
}
5256
if (($config['cookieDomain'] ?? null) === 'domain') {
5357
$config['cookieDomain'] = $builder::literal('$this->getByType(Nette\Http\IRequest::class)->getUrl()->getDomain(2)');
5458
}
@@ -62,7 +66,7 @@ public function loadConfiguration()
6266
]);
6367
}
6468

65-
unset($config['expiration'], $config['autoStart'], $config['debugger']);
69+
unset($config['expiration'], $config['handler'], $config['autoStart'], $config['debugger']);
6670
if (!empty($config)) {
6771
$session->addSetup('setOptions', [$config]);
6872
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
/**
4+
* Test: SessionExtension.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Bridges\HttpDI\HttpExtension;
10+
use Nette\Bridges\HttpDI\SessionExtension;
11+
use Nette\DI;
12+
use Tester\Assert;
13+
14+
15+
require __DIR__ . '/../bootstrap.php';
16+
17+
18+
class TestHandler extends SessionHandler
19+
{
20+
public $called = false;
21+
22+
23+
public function open($save_path, $session_name)
24+
{
25+
$this->called = true;
26+
return parent::open($save_path, $session_name);
27+
}
28+
}
29+
30+
31+
$compiler = new DI\Compiler;
32+
$compiler->addExtension('foo', new HttpExtension);
33+
$compiler->addExtension('session', new SessionExtension(false, PHP_SAPI === 'cli'));
34+
35+
$loader = new DI\Config\Loader;
36+
$config = $loader->load(Tester\FileMock::create('
37+
session:
38+
handler: @handler
39+
40+
services:
41+
foo.request: Nette\Http\Request(Nette\Http\UrlScript("http://www.nette.org"))
42+
handler: TestHandler
43+
', 'neon'));
44+
45+
eval($compiler->addConfig($config)->compile());
46+
47+
$container = new Container;
48+
$container->getService('session')->start();
49+
50+
Assert::true($container->getService('handler')->called);

0 commit comments

Comments
 (0)