[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.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param ContainerInterface $container The dependency injection container
|
* @param ContainerInterface $container The dependency injection container
|
||||||
* @param TemplateFinderInterface $finder The template paths cache warmer
|
* @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
|
// We don't inject the Twig environment directly as it depends on the
|
||||||
// template locator (via the loader) which might be a cached one.
|
// template locator (via the loader) which might be a cached one.
|
||||||
// The cached template locator is available once the TemplatePathsCacheWarmer
|
// 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->container = $container;
|
||||||
$this->finder = $finder;
|
$this->finder = $finder;
|
||||||
}
|
}
|
||||||
@ -51,6 +52,10 @@ class TemplateCacheCacheWarmer implements CacheWarmerInterface
|
|||||||
*/
|
*/
|
||||||
public function warmUp($cacheDir)
|
public function warmUp($cacheDir)
|
||||||
{
|
{
|
||||||
|
if (null === $this->finder) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$twig = $this->container->get('twig');
|
$twig = $this->container->get('twig');
|
||||||
|
|
||||||
foreach ($this->finder->findAllTemplates() as $template) {
|
foreach ($this->finder->findAllTemplates() as $template) {
|
||||||
|
@ -68,9 +68,7 @@ class ExtensionPass implements CompilerPassInterface
|
|||||||
$container->getDefinition('twig.extension.debug')->addTag('twig.extension');
|
$container->getDefinition('twig.extension.debug')->addTag('twig.extension');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($container->has('templating')) {
|
if (!$container->has('templating')) {
|
||||||
$container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer');
|
|
||||||
} else {
|
|
||||||
$loader = $container->getDefinition('twig.loader.native_filesystem');
|
$loader = $container->getDefinition('twig.loader.native_filesystem');
|
||||||
$loader->addTag('twig.loader');
|
$loader->addTag('twig.loader');
|
||||||
$loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
|
$loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
|
||||||
|
@ -46,8 +46,9 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="twig.cache_warmer" class="%twig.cache_warmer.class%" public="false">
|
<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="service_container" />
|
||||||
<argument type="service" id="templating.finder" />
|
<argument type="service" id="templating.finder" on-invalid="ignore" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="twig.loader.native_filesystem" class="Twig_Loader_Filesystem" public="false">
|
<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/dependency-injection": "~2.6,>=2.6.6",
|
||||||
"symfony/expression-language": "~2.4",
|
"symfony/expression-language": "~2.4",
|
||||||
"symfony/config": "~2.2",
|
"symfony/config": "~2.2",
|
||||||
|
"symfony/finder": "~2.0,>=2.0.5",
|
||||||
"symfony/routing": "~2.1",
|
"symfony/routing": "~2.1",
|
||||||
"symfony/templating": "~2.1",
|
"symfony/templating": "~2.1",
|
||||||
"symfony/yaml": "~2.3",
|
"symfony/yaml": "~2.3",
|
||||||
|
Reference in New Issue
Block a user