]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/container/ContainerBuilder.php
Use multi-level routes for existing controllers instead of 1 level everywhere
[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;
7b2ba6ef 10use Shaarli\Feed\FeedBuilder;
485b168a 11use Shaarli\Formatter\FormatterFactory;
6c50a6cc 12use Shaarli\History;
c22fa57a 13use Shaarli\Http\HttpAccess;
6c50a6cc
A
14use Shaarli\Plugin\PluginManager;
15use Shaarli\Render\PageBuilder;
8e47af2b 16use Shaarli\Render\PageCacheManager;
6c50a6cc
A
17use Shaarli\Security\LoginManager;
18use Shaarli\Security\SessionManager;
c22fa57a 19use Shaarli\Thumbnailer;
6c50a6cc
A
20
21/**
22 * Class ContainerBuilder
23 *
24 * Helper used to build a Slim container instance with Shaarli's object dependencies.
25 * Note that most injected objects MUST be added as closures, to let the container instantiate
26 * only the objects it requires during the execution.
27 *
28 * @package Container
29 */
30class ContainerBuilder
31{
32 /** @var ConfigManager */
33 protected $conf;
34
35 /** @var SessionManager */
36 protected $session;
37
38 /** @var LoginManager */
39 protected $login;
40
9c75f877
A
41 /** @var string|null */
42 protected $basePath = null;
8e47af2b
A
43
44 public function __construct(
45 ConfigManager $conf,
46 SessionManager $session,
9c75f877 47 LoginManager $login
8e47af2b 48 ) {
6c50a6cc
A
49 $this->conf = $conf;
50 $this->session = $session;
51 $this->login = $login;
52 }
53
54 public function build(): ShaarliContainer
55 {
56 $container = new ShaarliContainer();
8e47af2b 57
6c50a6cc
A
58 $container['conf'] = $this->conf;
59 $container['sessionManager'] = $this->session;
60 $container['loginManager'] = $this->login;
9c75f877 61 $container['basePath'] = $this->basePath;
8e47af2b 62
6c50a6cc
A
63 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
64 return new PluginManager($container->conf);
65 };
66
67 $container['history'] = function (ShaarliContainer $container): History {
68 return new History($container->conf->get('resource.history'));
69 };
70
71 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
72 return new BookmarkFileService(
73 $container->conf,
74 $container->history,
75 $container->loginManager->isLoggedIn()
76 );
77 };
78
79 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
80 return new PageBuilder(
81 $container->conf,
82 $container->sessionManager->getSession(),
83 $container->bookmarkService,
84 $container->sessionManager->generateToken(),
85 $container->loginManager->isLoggedIn()
86 );
87 };
88
0498b209
A
89 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
90 return new PluginManager($container->conf);
91 };
92
485b168a
A
93 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
94 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
95 };
96
8e47af2b 97 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
c4d5be53
A
98 return new PageCacheManager(
99 $container->conf->get('resource.page_cache'),
100 $container->loginManager->isLoggedIn()
101 );
8e47af2b
A
102 };
103
7b2ba6ef
A
104 $container['feedBuilder'] = function (ShaarliContainer $container): FeedBuilder {
105 return new FeedBuilder(
106 $container->bookmarkService,
107 $container->formatterFactory->getFormatter(),
108 $container->environment,
109 $container->loginManager->isLoggedIn()
110 );
111 };
112
c22fa57a
A
113 $container['thumbnailer'] = function (ShaarliContainer $container): Thumbnailer {
114 return new Thumbnailer($container->conf);
115 };
116
117 $container['httpAccess'] = function (): HttpAccess {
118 return new HttpAccess();
119 };
120
6c50a6cc
A
121 return $container;
122 }
123}