3 declare(strict_types
=1);
5 namespace Shaarli\Container
;
7 use Shaarli\Bookmark\BookmarkFileService
;
8 use Shaarli\Bookmark\BookmarkServiceInterface
;
9 use Shaarli\Config\ConfigManager
;
11 use Shaarli\Plugin\PluginManager
;
12 use Shaarli\Render\PageBuilder
;
13 use Shaarli\Security\LoginManager
;
14 use Shaarli\Security\SessionManager
;
17 * Class ContainerBuilder
19 * Helper used to build a Slim container instance with Shaarli's object dependencies.
20 * Note that most injected objects MUST be added as closures, to let the container instantiate
21 * only the objects it requires during the execution.
25 class ContainerBuilder
27 /** @var ConfigManager */
30 /** @var SessionManager */
33 /** @var LoginManager */
36 public function __construct(ConfigManager
$conf, SessionManager
$session, LoginManager
$login)
39 $this->session
= $session;
40 $this->login
= $login;
43 public function build(): ShaarliContainer
45 $container = new ShaarliContainer();
46 $container['conf'] = $this->conf
;
47 $container['sessionManager'] = $this->session
;
48 $container['loginManager'] = $this->login
;
49 $container['plugins'] = function (ShaarliContainer
$container): PluginManager
{
50 return new PluginManager($container->conf
);
53 $container['history'] = function (ShaarliContainer
$container): History
{
54 return new History($container->conf
->get('resource.history'));
57 $container['bookmarkService'] = function (ShaarliContainer
$container): BookmarkServiceInterface
{
58 return new BookmarkFileService(
61 $container->loginManager
->isLoggedIn()
65 $container['pageBuilder'] = function (ShaarliContainer
$container): PageBuilder
{
66 return new PageBuilder(
68 $container->sessionManager
->getSession(),
69 $container->bookmarkService
,
70 $container->sessionManager
->generateToken(),
71 $container->loginManager
->isLoggedIn()
75 $container['pluginManager'] = function (ShaarliContainer
$container): PluginManager
{
76 return new PluginManager($container->conf
);