3 declare(strict_types
=1);
5 namespace Shaarli\Container
;
7 use Shaarli\Bookmark\BookmarkFileService
;
8 use Shaarli\Bookmark\BookmarkServiceInterface
;
9 use Shaarli\Config\ConfigManager
;
10 use Shaarli\Formatter\FormatterFactory
;
12 use Shaarli\Plugin\PluginManager
;
13 use Shaarli\Render\PageBuilder
;
14 use Shaarli\Security\LoginManager
;
15 use Shaarli\Security\SessionManager
;
18 * Class ContainerBuilder
20 * Helper used to build a Slim container instance with Shaarli's object dependencies.
21 * Note that most injected objects MUST be added as closures, to let the container instantiate
22 * only the objects it requires during the execution.
26 class ContainerBuilder
28 /** @var ConfigManager */
31 /** @var SessionManager */
34 /** @var LoginManager */
37 public function __construct(ConfigManager
$conf, SessionManager
$session, LoginManager
$login)
40 $this->session
= $session;
41 $this->login
= $login;
44 public function build(): ShaarliContainer
46 $container = new ShaarliContainer();
47 $container['conf'] = $this->conf
;
48 $container['sessionManager'] = $this->session
;
49 $container['loginManager'] = $this->login
;
50 $container['plugins'] = function (ShaarliContainer
$container): PluginManager
{
51 return new PluginManager($container->conf
);
54 $container['history'] = function (ShaarliContainer
$container): History
{
55 return new History($container->conf
->get('resource.history'));
58 $container['bookmarkService'] = function (ShaarliContainer
$container): BookmarkServiceInterface
{
59 return new BookmarkFileService(
62 $container->loginManager
->isLoggedIn()
66 $container['pageBuilder'] = function (ShaarliContainer
$container): PageBuilder
{
67 return new PageBuilder(
69 $container->sessionManager
->getSession(),
70 $container->bookmarkService
,
71 $container->sessionManager
->generateToken(),
72 $container->loginManager
->isLoggedIn()
76 $container['pluginManager'] = function (ShaarliContainer
$container): PluginManager
{
77 return new PluginManager($container->conf
);
80 $container['formatterFactory'] = function (ShaarliContainer
$container): FormatterFactory
{
81 return new FormatterFactory($container->conf
, $container->loginManager
->isLoggedIn());