PluginProbe
JCH Optimize / trunk
JCH Optimize vtrunk
6.0.2 6.0.1 trunk 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.2.0 1.2.1 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.10.0 2.2.0 2.2.1 All 58 releases
jch-optimize / lib / src / AbstractContainerFactory.php

AbstractContainerFactory.php in JCH Optimize trunk, at lib/src/AbstractContainerFactory.php

111 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * JCH Optimize - Performs several front-end optimizations for fast downloads
5 *
6 * @package jchoptimize/core
7 * @author Samuel Marshall <samuel@jch-optimize.net>
8 * @copyright Copyright (c) 2025 Samuel Marshall / JCH Optimize
9 * @license GNU/GPLv3, or later. See LICENSE file
10 *
11 * If LICENSE file missing, see <http://www.gnu.org/licenses/>.
12 */
13
14 namespace JchOptimize\Core;
15
16 use _JchOptimizeVendor\V91\Joomla\DI\Container as VendoredContainer;
17 use _JchOptimizeVendor\V91\Psr\Container\ContainerInterface as VendoredContainerInterface;
18 use JchOptimize\Core\Debug\Debugger;
19 use JchOptimize\Core\Html\HtmlElementBuilder;
20 use JchOptimize\Core\Service\Provider\Admin;
21 use JchOptimize\Core\Service\Provider\Callbacks;
22 use JchOptimize\Core\Service\Provider\Core;
23 use JchOptimize\Core\Service\Provider\FeatureHelpers;
24 use JchOptimize\Core\Service\Provider\LaminasCache;
25 use JchOptimize\Core\Service\Provider\OptimizeImages;
26 use JchOptimize\Core\Service\Provider\PageCache;
27 use JchOptimize\Core\Service\Provider\SharedEvents;
28 use JchOptimize\Core\Service\Provider\Spatie;
29 use Joomla\DI\Container as JoomlaContainer;
30 use Psr\Container\ContainerInterface as PsrContainerInterface;
31
32 abstract class AbstractContainerFactory
33 {
34 private static ?VendoredContainer $container = null;
35
36 final public function __construct()
37 {
38 }
39
40 /**
41 * Will return a new instance of the container every time
42 */
43 public static function create(
44 VendoredContainerInterface|PsrContainerInterface|null $parent = null
45 ): VendoredContainer {
46 $ContainerFactory = new static();
47
48 $container = new VendoredContainer($parent);
49
50 $ContainerFactory->registerCoreServiceProviders($container);
51 $ContainerFactory->registerPlatformServiceProviders($container);
52
53 Debugger::setContainer($container);
54 HtmlElementBuilder::setContainer($container);
55
56 return $container;
57 }
58
59 /**
60 * @param VendoredContainer $container
61 *
62 * @return void
63 */
64 public function registerCoreServiceProviders(VendoredContainer $container): void
65 {
66 $container->registerServiceProvider(new SharedEvents())
67 ->registerServiceProvider(new Core())
68 ->registerServiceProvider(new Callbacks())
69 ->registerServiceProvider(new LaminasCache())
70 ->registerServiceProvider(new PageCache())
71 ->registerServiceProvider(new Admin());
72
73 if (JCH_PRO) {
74 $container->registerServiceProvider(new FeatureHelpers())
75 ->registerServiceProvider(new OptimizeImages())
76 ->registerServiceProvider(new Spatie());
77 }
78 }
79
80 public static function resetContainer(
81 VendoredContainer|JoomlaContainer $container
82 ): VendoredContainer|JoomlaContainer {
83 foreach ((clone $container)->getKeys() as $key) {
84 if ($resource = $container->getResource($key)) {
85 $resource->reset();
86 }
87 }
88
89 return $container;
90 }
91
92 public static function getInstance(
93 VendoredContainerInterface|PsrContainerInterface|null $parent = null
94 ): VendoredContainer {
95 if (null === self::$container) {
96 self::$container = self::create($parent);
97 }
98
99 return self::$container;
100 }
101
102 /**
103 * To be implemented by JchOptimize/Container to attach service providers specific to the particular platform
104 *
105 * @param VendoredContainer $container
106 *
107 * @return void
108 */
109 abstract protected function registerPlatformServiceProviders(VendoredContainer $container): void;
110 }
111