Issues (294)

src/EBloodBank/EntityManagerFactory.php (1 issue)

Labels
Severity
1
<?php
2
/**
3
 * @package EBloodBank
4
 * @since   1.6
5
 */
6
namespace EBloodBank;
7
8
use Doctrine;
9
use Doctrine\ORM;
10
use Psr\Container\ContainerInterface;
11
12
/**
13
 * @since 1.6
14
 */
15
class EntityManagerFactory
16
{
17
    /**
18
     * @param  ContainerInterface $container
19
     * @return \Doctrine\ORM\EntityManager
20
     * @since  1.6
21
     */
22
    public function __invoke(ContainerInterface $container)
23
    {
24
        $config = ORM\Tools\Setup::createConfiguration((bool) EBB_DEV_MODE);
25
26
        $entitiesPaths = [trimTrailingSlash(EBB_DIR) . '/src/EBloodBank/Models/'];
27
        $driverImpl = $config->newDefaultAnnotationDriver($entitiesPaths, true);
28
        $config->addEntityNamespace('Entities', 'EBloodBank\Models');
29
        $config->setMetadataDriverImpl($driverImpl);
30
31
        $config->setProxyDir(trimTrailingSlash(EBB_DIR) . '/src/EBloodBank/Proxies/');
32
        $config->setAutoGenerateProxyClasses((bool) EBB_DEV_MODE);
33
        $config->setProxyNamespace('EBloodBank\Proxies');
34
        
35
        $cacheDriver = $this->setupCacheDriver();
36
        $config->setMetadataCacheImpl($cacheDriver);
37
        $config->setResultCacheImpl($cacheDriver);
38
        $config->setQueryCacheImpl($cacheDriver);
39
40
        $entityManager = ORM\EntityManager::create($container->get('db_connection'), $config);
41
42
        return $entityManager;
43
    }
44
45
    /**
46
     * @return \Doctrine\Common\Cache\Cache
47
     * @since 1.6
48
     */
49
    protected function setupCacheDriver()
50
    {
51
        if (EBB_DEV_MODE) {
52
            $cacheDriver = new Doctrine\Common\Cache\ArrayCache();
53
        } else {
54
            if (EBB_REDIS_CACHE && extension_loaded('redis')) {
55
                $redis = new Redis();
0 ignored issues
show
The type EBloodBank\Redis was not found. Did you mean Redis? If so, make sure to prefix the type with \.
Loading history...
56
                $redis->connect(EBB_REDIS_HOST, EBB_REDIS_PORT);
57
                if (EBB_REDIS_PASS) {
58
                    $redis->auth(EBB_REDIS_PASS);
59
                }
60
                if (EBB_REDIS_DB) {
61
                    $redis->select(EBB_REDIS_DB);
62
                }
63
                $cacheDriver = new Doctrine\Common\Cache\RedisCache();
64
                $cacheDriver->setRedis($redis);
65
            } elseif (EBB_APCU_CACHE && extension_loaded('apcu')) {
66
                $cacheDriver = new Doctrine\Common\Cache\ApcuCache();
67
            } elseif (EBB_FS_CACHE && is_writable(EBB_CACHE_DIR)) {
68
                $cacheDriver = new Doctrine\Common\Cache\FilesystemCache(EBB_CACHE_DIR, '.ebb.data');
69
            } else {
70
                $cacheDriver = new Doctrine\Common\Cache\ArrayCache();
71
            }
72
        }
73
74
        return $cacheDriver;
75
    }
76
}
77