CacheManagerBootstrapper   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 21
dl 0
loc 53
rs 10
c 1
b 0
f 0
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getBindings() 0 4 1
A registerBindings() 0 7 1
A getCacheBridge() 0 19 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Bootstrappers\Template;
6
7
use AbterPhp\Framework\Config\Config;
8
use AbterPhp\Framework\Template\CacheManager;
9
use Opulence\Cache\ArrayBridge;
10
use Opulence\Cache\FileBridge;
11
use Opulence\Cache\ICacheBridge;
12
use Opulence\Cache\MemcachedBridge;
13
use Opulence\Cache\RedisBridge;
14
use Opulence\Ioc\Bootstrappers\Bootstrapper;
15
use Opulence\Ioc\Bootstrappers\ILazyBootstrapper;
16
use Opulence\Ioc\IContainer;
17
use Opulence\Ioc\IocException;
18
use Opulence\Memcached\Memcached;
19
use Opulence\Redis\Redis;
20
21
class CacheManagerBootstrapper extends Bootstrapper implements ILazyBootstrapper
22
{
23
    /**
24
     * @return array
25
     */
26
    public function getBindings(): array
27
    {
28
        return [
29
            CacheManager::class,
30
        ];
31
    }
32
33
    /**
34
     * @param IContainer $container
35
     *
36
     * @throws IocException
37
     */
38
    public function registerBindings(IContainer $container): void
39
    {
40
        $cacheBridge = $this->getCacheBridge($container);
41
42
        $cacheManager = new CacheManager($cacheBridge);
43
44
        $container->bindInstance(CacheManager::class, $cacheManager);
45
    }
46
47
    /**
48
     * Gets the cache bridge to use for a cache session handler
49
     *
50
     * @param IContainer $container The IoC container
51
     *
52
     * @return ICacheBridge The cache bridge
53
     * @throws IocException Thrown if the cache bridge could not be resolved
54
     */
55
    private function getCacheBridge(IContainer $container): ICacheBridge
56
    {
57
        switch (Config::mustGetString('templates', 'cache.bridge')) {
58
            case ArrayBridge::class:
59
                return new ArrayBridge();
60
            case MemcachedBridge::class:
61
                return new MemcachedBridge(
62
                    $container->resolve(Memcached::class),
63
                    Config::mustGetString('templates', 'cache.clientName'),
64
                    Config::mustGetString('templates', 'cache.keyPrefix')
65
                );
66
            case RedisBridge::class:
67
                return new RedisBridge(
68
                    $container->resolve(Redis::class),
69
                    Config::mustGetString('templates', 'cache.clientName'),
70
                    Config::mustGetString('templates', 'cache.keyPrefix')
71
                );
72
            default: // FileBridge
73
                return new FileBridge(Config::mustGetString('templates', 'file.path'));
74
        }
75
    }
76
}
77