Completed
Push — 1.x ( 378c34...640f8a )
by Akihito
12s
created

ProdModule::installApcuCache()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 1
1
<?php
2
/**
3
 * This file is part of the BEAR.Package package.
4
 *
5
 * @license http://opensource.org/licenses/MIT MIT
6
 */
7
namespace BEAR\Package\Context;
8
9
use BEAR\Package\Context\Provider\ProdCacheProvider;
10
use BEAR\Package\Provide\Error\ErrorPageFactoryInterface;
11
use BEAR\Package\Provide\Error\ProdVndErrorPageFactory;
12
use BEAR\Package\Provide\Logger\ProdMonologProviver;
13
use BEAR\Resource\RenderInterface;
14
use BEAR\Resource\VoidOptionsRenderer;
15
use Doctrine\Common\Annotations\AnnotationReader;
16
use Doctrine\Common\Annotations\CachedReader;
17
use Doctrine\Common\Annotations\Reader;
18
use Doctrine\Common\Cache\Cache;
19
use Psr\Log\LoggerInterface;
20
use Ray\Di\AbstractModule;
21
use Ray\Di\Scope;
22
23
/**
24
 * @codeCoverageIgnore
25
 */
26
class ProdModule extends AbstractModule
27
{
28
    /**
29
     * {@inheritdoc}
30
     */
31
    protected function configure()
32
    {
33
        $this->bind(ErrorPageFactoryInterface::class)->to(ProdVndErrorPageFactory::class);
34
        $this->bind(LoggerInterface::class)->toProvider(ProdMonologProviver::class)->in(Scope::SINGLETON);
35
        $this->disableOptionsMethod();
36
        // prod cache
37
        $this->bind()->annotatedWith('cache_namespace')->toInstance(uniqid('', false));
38
        $this->bind(Cache::class)->toProvider(ProdCacheProvider::class)->in(Scope::SINGLETON);
39
        // prod annotation reader
40
        $this->bind(Reader::class)->annotatedWith('annotation_reader')->to(AnnotationReader::class);
41
        $this->bind(Reader::class)->toConstructor(
42
            CachedReader::class,
43
            'reader=annotation_reader'
44
        );
45
    }
46
47
    /**
48
     * Disable OPTIONS resource request method in production
49
     *
50
     * OPTIONS method return 405 Method Not Allowed error code. To enable OPTIONS in `prod` context,
51
     * Install BEAR\Resource\Module\OptionsMethodModule() in your ProdModule.
52
     */
53
    private function disableOptionsMethod()
54
    {
55
        $this->bind(RenderInterface::class)->annotatedWith('options')->to(VoidOptionsRenderer::class);
56
    }
57
}
58