[TwigBundle] Fix Twig cache is not properly warmed
This commit is contained in:
parent
619528a274
commit
e704ee4d6c
|
@ -31,15 +31,16 @@ class TemplateCacheCacheWarmer implements CacheWarmerInterface
|
|||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param ContainerInterface $container The dependency injection container
|
||||
* @param TemplateFinderInterface $finder The template paths cache warmer
|
||||
* @param ContainerInterface $container The dependency injection container
|
||||
* @param TemplateFinderInterface|null $finder The template paths cache warmer
|
||||
*/
|
||||
public function __construct(ContainerInterface $container, TemplateFinderInterface $finder)
|
||||
public function __construct(ContainerInterface $container, TemplateFinderInterface $finder = null)
|
||||
{
|
||||
// We don't inject the Twig environment directly as it depends on the
|
||||
// template locator (via the loader) which might be a cached one.
|
||||
// The cached template locator is available once the TemplatePathsCacheWarmer
|
||||
// has been warmed up
|
||||
// has been warmed up.
|
||||
// But it can also be null if templating has been disabled.
|
||||
$this->container = $container;
|
||||
$this->finder = $finder;
|
||||
}
|
||||
|
@ -51,6 +52,10 @@ class TemplateCacheCacheWarmer implements CacheWarmerInterface
|
|||
*/
|
||||
public function warmUp($cacheDir)
|
||||
{
|
||||
if (null === $this->finder) {
|
||||
return;
|
||||
}
|
||||
|
||||
$twig = $this->container->get('twig');
|
||||
|
||||
foreach ($this->finder->findAllTemplates() as $template) {
|
||||
|
|
|
@ -68,9 +68,7 @@ class ExtensionPass implements CompilerPassInterface
|
|||
$container->getDefinition('twig.extension.debug')->addTag('twig.extension');
|
||||
}
|
||||
|
||||
if ($container->has('templating')) {
|
||||
$container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer');
|
||||
} else {
|
||||
if (!$container->has('templating')) {
|
||||
$loader = $container->getDefinition('twig.loader.native_filesystem');
|
||||
$loader->addTag('twig.loader');
|
||||
$loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
|
||||
|
|
|
@ -46,8 +46,9 @@
|
|||
</service>
|
||||
|
||||
<service id="twig.cache_warmer" class="%twig.cache_warmer.class%" public="false">
|
||||
<tag name="kernel.cache_warmer" />
|
||||
<argument type="service" id="service_container" />
|
||||
<argument type="service" id="templating.finder" />
|
||||
<argument type="service" id="templating.finder" on-invalid="ignore" />
|
||||
</service>
|
||||
|
||||
<service id="twig.loader.native_filesystem" class="Twig_Loader_Filesystem" public="false">
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\TwigBundle\Tests;
|
||||
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||
use Symfony\Bundle\TwigBundle\TwigBundle;
|
||||
|
||||
class NewCacheWamingTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testCacheIsProperlyWarmedWhenTemplatingIsAvailable()
|
||||
{
|
||||
$kernel = new CacheWarmingKernel(true);
|
||||
$kernel->boot();
|
||||
|
||||
$warmer = $kernel->getContainer()->get('cache_warmer');
|
||||
$warmer->enableOptionalWarmers();
|
||||
$warmer->warmUp($kernel->getCacheDir());
|
||||
|
||||
$this->assertTrue(file_exists($kernel->getCacheDir().'/twig'));
|
||||
}
|
||||
|
||||
public function testCacheIsNotWarmedWhenTemplatingIsDisabled()
|
||||
{
|
||||
$kernel = new CacheWarmingKernel(false);
|
||||
$kernel->boot();
|
||||
|
||||
$warmer = $kernel->getContainer()->get('cache_warmer');
|
||||
$warmer->enableOptionalWarmers();
|
||||
$warmer->warmUp($kernel->getCacheDir());
|
||||
|
||||
$this->assertFalse(file_exists($kernel->getCacheDir().'/twig'));
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->deleteTempDir();
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->deleteTempDir();
|
||||
}
|
||||
|
||||
private function deleteTempDir()
|
||||
{
|
||||
if (!file_exists($dir = sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$fs = new Filesystem();
|
||||
$fs->remove($dir);
|
||||
}
|
||||
}
|
||||
|
||||
class CacheWarmingKernel extends Kernel
|
||||
{
|
||||
private $withTemplating;
|
||||
|
||||
public function __construct($withTemplating)
|
||||
{
|
||||
$this->withTemplating = $withTemplating;
|
||||
|
||||
parent::__construct('dev', true);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'CacheWarming';
|
||||
}
|
||||
|
||||
public function registerBundles()
|
||||
{
|
||||
return array(new FrameworkBundle(), new TwigBundle());
|
||||
}
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load(function ($container) {
|
||||
$container->loadFromExtension('framework', array(
|
||||
'secret' => '$ecret',
|
||||
));
|
||||
});
|
||||
|
||||
if ($this->withTemplating) {
|
||||
$loader->load(function ($container) {
|
||||
$container->loadFromExtension('framework', array(
|
||||
'secret' => '$ecret',
|
||||
'templating' => array('engines' => array('twig')),
|
||||
'router' => array('resource' => '%kernel.root_dir%/Resources/config/empty_routing.yml'),
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
{
|
||||
return sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel/cache';
|
||||
}
|
||||
|
||||
public function getLogDir()
|
||||
{
|
||||
return sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel/logs';
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@
|
|||
"symfony/dependency-injection": "~2.6,>=2.6.6",
|
||||
"symfony/expression-language": "~2.4",
|
||||
"symfony/config": "~2.2",
|
||||
"symfony/finder": "~2.0,>=2.0.5",
|
||||
"symfony/routing": "~2.1",
|
||||
"symfony/templating": "~2.1",
|
||||
"symfony/yaml": "~2.3",
|
||||
|
|
Reference in New Issue