]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/container/ContainerBuilder.php
Make FeedBuilder instance creation independant of the request stack
[github/shaarli/Shaarli.git] / application / container / ContainerBuilder.php
CommitLineData
6c50a6cc
A
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli\Container;
6
7use Shaarli\Bookmark\BookmarkFileService;
8use Shaarli\Bookmark\BookmarkServiceInterface;
9use Shaarli\Config\ConfigManager;
485b168a 10use Shaarli\Formatter\FormatterFactory;
6c50a6cc
A
11use Shaarli\History;
12use Shaarli\Plugin\PluginManager;
13use Shaarli\Render\PageBuilder;
8e47af2b 14use Shaarli\Render\PageCacheManager;
6c50a6cc
A
15use Shaarli\Security\LoginManager;
16use Shaarli\Security\SessionManager;
17
18/**
19 * Class ContainerBuilder
20 *
21 * Helper used to build a Slim container instance with Shaarli's object dependencies.
22 * Note that most injected objects MUST be added as closures, to let the container instantiate
23 * only the objects it requires during the execution.
24 *
25 * @package Container
26 */
27class ContainerBuilder
28{
29 /** @var ConfigManager */
30 protected $conf;
31
32 /** @var SessionManager */
33 protected $session;
34
35 /** @var LoginManager */
36 protected $login;
37
8e47af2b
A
38 /** @var string */
39 protected $webPath;
40
41 public function __construct(
42 ConfigManager $conf,
43 SessionManager $session,
44 LoginManager $login,
45 string $webPath
46 ) {
6c50a6cc
A
47 $this->conf = $conf;
48 $this->session = $session;
49 $this->login = $login;
8e47af2b 50 $this->webPath = $webPath;
6c50a6cc
A
51 }
52
53 public function build(): ShaarliContainer
54 {
55 $container = new ShaarliContainer();
8e47af2b 56
6c50a6cc
A
57 $container['conf'] = $this->conf;
58 $container['sessionManager'] = $this->session;
59 $container['loginManager'] = $this->login;
8e47af2b
A
60 $container['webPath'] = $this->webPath;
61
6c50a6cc
A
62 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
63 return new PluginManager($container->conf);
64 };
65
66 $container['history'] = function (ShaarliContainer $container): History {
67 return new History($container->conf->get('resource.history'));
68 };
69
70 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
71 return new BookmarkFileService(
72 $container->conf,
73 $container->history,
74 $container->loginManager->isLoggedIn()
75 );
76 };
77
78 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
79 return new PageBuilder(
80 $container->conf,
81 $container->sessionManager->getSession(),
82 $container->bookmarkService,
83 $container->sessionManager->generateToken(),
84 $container->loginManager->isLoggedIn()
85 );
86 };
87
0498b209
A
88 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
89 return new PluginManager($container->conf);
90 };
91
485b168a
A
92 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
93 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
94 };
95
8e47af2b 96 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
c4d5be53
A
97 return new PageCacheManager(
98 $container->conf->get('resource.page_cache'),
99 $container->loginManager->isLoggedIn()
100 );
8e47af2b
A
101 };
102
6c50a6cc
A
103 return $container;
104 }
105}