TemplatePathsCacheWarmer::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 5
ccs 0
cts 5
cp 0
rs 9.4285
cc 1
eloc 3
nc 1
nop 3
crap 2
1
<?php
2
namespace Boekkooi\Bundle\TwigJackBundle\CacheWarmer;
3
4
use Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinderInterface;
5
use Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplatePathsCacheWarmer as BaseTemplatePathsCacheWarmer;
6
use Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator;
7
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
8
use Symfony\Component\HttpKernel\KernelInterface;
9
10
/**
11
 * @author Warnar Boekkooi <[email protected]>
12
 */
13
class TemplatePathsCacheWarmer extends BaseTemplatePathsCacheWarmer
14
{
15
    /**
16
     * @var KernelInterface
17
     */
18
    protected $kernel;
19
20
    public function __construct(TemplateFinderInterface $finder, TemplateLocator $locator, KernelInterface $kernel)
21
    {
22
        parent::__construct($finder, $locator);
23
        $this->kernel = $kernel;
24
    }
25
26
    /**
27
     * Warms up the cache.
28
     *
29
     * @param string $cacheDir The cache directory
30
     */
31
    public function warmUp($cacheDir)
32
    {
33
        $templates = array();
34
35
        /** @var \Symfony\Component\Templating\TemplateReferenceInterface $template */
36
        foreach ($this->finder->findAllTemplates() as $template) {
37
            $templates[$template->getLogicalName()] = $this->locator->locate($template);
38
39
            if (!$template instanceof TemplateReference) {
40
                continue;
41
            }
42
43
            $bundle = $template->get('bundle');
44
            if (empty($bundle)) {
45
                continue;
46
            }
47
            // Resolve the base bundle
48
            $bundles = $this->kernel->getBundle($bundle, false);
49
            $baseBundle = end($bundles);
50
51
            // Resolve the base path
52
            $relativePath = substr($template->getPath(), strlen($bundle) + 1);
53
            $baseBundlePath = $baseBundle->getPath() . $relativePath;
54
55
            // Check if the base is the same if not add the override to the template cache
56
            if ($templates[$template->getLogicalName()] !== $baseBundlePath) {
57
                $templates['!'.$template->getLogicalName()] = $baseBundlePath;
58
            }
59
        }
60
61
        $this->writeCacheFile($cacheDir.'/templates.php', sprintf('<?php return %s;', var_export($templates, true)));
62
    }
63
}
64