8000 Merge branch '2.8' · symfony/symfony@a5c65c1 · GitHub
[go: up one dir, main page]

Skip to content

Commit a5c65c1

Browse files
committed
Merge branch '2.8'
* 2.8: [Console] Add domain exceptions to replace generic exceptions Implement service-based Resource (cache) validation
2 parents 9db5d01 + dacbfe9 commit a5c65c1

File tree

68 files changed

+1117
-387
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1117
-387
lines changed

UPGRADE-3.0.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,3 +1286,10 @@ UPGRADE FROM 2.x to 3.0
12861286
### HttpFoundation
12871287

12881288
* `Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface` no longer implements the `IteratorAggregate` interface. Use the `all()` method instead of iterating over the flash bag.
1289+
1290+
### Config
1291+
1292+
* `\Symfony\Component\Config\Resource\ResourceInterface::isFresh()` has been removed. Also,
1293+
cache validation through this method (which was still supported in 2.8 for BC) does no longer
1294+
work because the `\Symfony\Component\Config\Resource\BCResourceInterfaceChecker` helper class
1295+
has been removed as well.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
13+
14+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Reference;
17+
18+
/**
19+
* Adds services tagged config_cache.resource_checker to the config_cache_factory service, ordering them by priority.
20+
*
21+
* @author Matthias Pigulla <mp@webfactory.de>
22+
* @author Benjamin Klotz <bk@webfactory.de>
23+
*/
24+
class ConfigCachePass implements CompilerPassInterface
25+
{
26+
public function process(ContainerBuilder $container)
27+
{
28+
$resourceCheckers = array();
29+
30+
foreach ($container->findTaggedServiceIds('config_cache.resource_checker') as $id => $tags) {
31+
$priority = isset($tags[0]['priority']) ? $tags[0]['priority'] : 0;
32+
$resourceCheckers[$priority][] = new Reference($id);
33+
}
34+
35+
if (empty($resourceCheckers)) {
36+
return;
37+
}
38+
39+
// sort by priority and flatten
40+
krsort($resourceCheckers);
41+
$resourceCheckers = call_user_func_array('array_merge', $resourceCheckers);
42+
43+
$container->getDefinition('config_cache_factory')->replaceArgument(0, $resourceCheckers);
44+
}
45+
}

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationExtractorPass;
2929
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationDumperPass;
3030
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPass;
31+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ConfigCachePass;
3132
use Symfony\Component\Debug\ErrorHandler;
3233
use Symfony\Component\DependencyInjection\ContainerBuilder;
3334
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
@@ -87,6 +88,7 @@ public function build(ContainerBuilder $container)
8788
if ($container->getParameter('kernel.debug')) {
8889
$container->addCompilerPass(new ContainerBuilderDebugDumpPass(), PassConfig::TYPE_AFTER_REMOVING);
8990
$container->addCompilerPass(new CompilerDebugDumpPass(), PassConfig::TYPE_AFTER_REMOVING);
91+
$container->addCompilerPass(new ConfigCachePa F438 ss());
9092
}
9193
}
9294
}

src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@
6161
</argument>
6262
<argument type="service" id="router.request_context" on-invalid="ignore" />
6363
<argument type="service" id="logger" on-invalid="ignore" />
64+
<call method="setConfigCacheFactory">
65+
<argument type="service" id="config_cache_factory" />
66+
</call>
6467
</service>
6568

6669
<service id="router" alias="router.default" />

src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,21 @@
4040
<service id="uri_signer" class="Symfony\Component\HttpKernel\UriSigner">
4141
<argument>%kernel.secret%</argument>
4242
</service>
43+
44+
<service id="config_cache_factory" class="Symfony\Component\Config\ResourceCheckerConfigCacheFactory">
45+
<argument type="collection"></argument>
46+
</service>
47+
48+
<service class="Symfony\Component\Config\Resource\SelfCheckingResourceChecker" public="false">
49+
<tag name="config_cache.resource_checker" priority="-990" />
50+
</service>
51+
52+
<!--
53+
This service is deprecated and will be removed in 3.0.
54+
-->
55+
<service class="Symfony\Component\Config\Resource\BCResourceInterfaceChecker" public="false">
56+
<tag name="config_cache.resource_checker" priority="-1000" />
57+
</service>
58+
4359
</services>
4460
</container>

src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
<argument key="debug">%kernel.debug%</argument>
1515
</argument>
1616
<argument type="collection" /> <!-- translation resources -->
17+
<call method="setConfigCacheFactory">
18+
<argument type="service" id="config_cache_factory" />
19+
</call>
1720
</service>
1821

1922
<service id="translator.logging" class="Symfony\Component\Translation\LoggingTranslator" public="false">

src/Symfony/Bundle/FrameworkBundle/Tests/Command/CacheClearCommand/CacheClearCommandTest.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Symfony\Bundle\FrameworkBundle\Console\Application;
66
use Symfony\Bundle\FrameworkBundle\Tests\Command\CacheClearCommand\Fixture\TestAppKernel;
77
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
8-
use Symfony\Component\Config\ConfigCache;
8+
use Symfony\Component\Config\ConfigCacheFactory;
99
use Symfony\Component\Config\Resource\ResourceInterface;
1010
use Symfony\Component\Console\Input\ArrayInput;
1111
use Symfony\Component\Console\Output\NullOutput;
@@ -47,15 +47,13 @@ public function testCacheIsFreshAfterCacheClearedWithWarmup()
4747
$metaFiles = $finder->files()->in($this->kernel->getCacheDir())->name('*.php.meta');
4848
// simply check that cache is warmed up
4949
$this->assertGreaterThanOrEqual(1, count($metaFiles));
50+
$configCacheFactory = new ConfigCacheFactory(true);
51+
$that = $this;
52+
5053
foreach ($metaFiles as $file) {
51-
$configCache = new ConfigCache(substr($file, 0, -5), true);
52-
$this->assertTrue(
53-
$configCache->isFresh(),
54-
sprintf(
55-
'Meta file "%s" is not fresh',
56-
(string) $file
57-
)
58-
);
54+
$configCacheFactory->cache(substr($file, 0, -5), function () use ($that, $file) {
55+
$that->fail(sprintf('Meta file "%s" is not fresh', (string) $file));
56+
});
5957
}
6058

6159
// check that app kernel file present in meta file of container's cache
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
13+
14+
use Symfony\Component\DependencyInjection\Reference;
15+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ConfigCachePass;
16+
17+
class ConfigCachePassTest extends \PHPUnit_Framework_TestCase
18+
{
19+
public function testThatCheckersAreProcessedInPriorityOrder()
20+
{
21+
$services = array(
22+
'checker_2' => array(0 => array('priority' => 100)),
23+
'checker_1' => array(0 => array('priority' => 200)),
24+
'checker_3' => array(),
25+
);
26+
27+
$definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
28+
$container = $this->getMock(
29+
'Symfony\Component\DependencyInjection\ContainerBuilder',
30+
array('findTaggedServiceIds', 'getDefinition', 'hasDefinition')
31+
);
32+
33+
$container->expects($this->atLeastOnce())
34+
->method('findTaggedServiceIds')
35+
->will($this->returnValue($services));
36+
$container->expects($this->atLeastOnce())
37+
->method('getDefinition')
38+
->with('config_cache_factory')
39+
->will($this->returnValue($definition));
40+
41+
$definition->expects($this->once())
42+
->method('replaceArgument')
43+
->with(0, array(
44+
new Reference('checker_1'),
45+
new Reference('checker_2'),
46+
new Reference('checker_3'),
47+
));
48+
49+
$pass = new ConfigCachePass();
50+
$pass->process($container);
51+
}
52+
53+
public function testThatCheckersCanBeMissing()
54+
{
55+
$definition = $this->getMock('Symfony\Component\DependencyInjection\Definition');
56+
$container = $this->getMock(
57+
'Symfony\Component\DependencyInjection\ContainerBuilder',
58+
array('findTaggedServiceIds')
59+
);
60+
61+
$container->expects($this->atLeastOnce())
62+
->method('findTaggedServiceIds')
63+
->will($this->returnValue(array()));
64+
65+
$pass = new ConfigCachePass();
66+
$pass->process($container);
67+
}
68+
}

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,15 +263,15 @@ public function testTranslator()
263263
);
264264

265265
$calls = $container->getDefinition('translator.default')->getMethodCalls();
266-
$this->assertEquals(array('fr'), $calls[0][1][0]);
266+
$this->assertEquals(array('fr'), $calls[1][1][0]);
267267
}
268268

269269
public function testTranslatorMultipleFallbacks()
270270
{
271271
$container = $this->createContainerFromFile('translator_fallbacks');
272272

273273
$calls = $container->getDefinition('translator.default')->getMethodCalls();
274-
$this->assertEquals(array('en', 'fr'), $calls[0][1][0]);
274+
$this->assertEquals(array('en', 'fr'), $calls[1][1][0]);
275275
}
276276

277277
/**

src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -105,34 +105,6 @@ public function testTransWithCachingWithInvalidLocale()
105105
$translator->trans('foo');
106106
}
107107

108-
public function testLoadResourcesWithCaching()
109-
{
110-
$loader = new \Symfony\Component\Translation\Loader\YamlFileLoader();
111-
$resourceFiles = array(
112-
'fr' => array(
113-
__DIR__.'/../Fixtures/Resources/translations/messages.fr.yml',
114-
),
115-
);
116-
117-
// prime the cache
118-
$translator = $this->getTranslator($loader, array('cache_dir' => $this->tmpDir, 'resource_files' => $resourceFiles), 'yml');
119-
$translator->setLocale('fr');
120-
121-
$this->assertEquals('répertoire', $translator->trans('folder'));
122-
123-
// do it another time as the cache is primed now
124-
$translator = $this->getTranslator($loader, array('cache_dir' => $this->tmpDir), 'yml');
125-
$translator->setLocale('fr');
126-
127-
$this->assertEquals('répertoire', $translator->trans('folder'));
128-
129-
// refresh cache when resources is changed in debug mode.
130-
$translator = $this->getTranslator($loader, array('cache_dir' => $this->tmpDir, 'debug' => true), 'yml');
131-
$translator->setLocale('fr');
132-
133-
$this->assertEquals('folder', $translator->trans('folder'));
134-
}
135-
136108
public function testLoadResourcesWithoutCaching()
137109
{
138110
$loader = new \Symfony\Component\Translation\Loader\YamlFileLoader();

src/Symfony/Component/Config/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Before: `InvalidArgumentException` (variable must contain at least two
2525
distinct elements).
2626
After: the code will work as expected and it will restrict the values of the
2727
`variable` option to just `value`.
28+
29+
* deprecated the `ResourceInterface::isFresh()` method. If you implement custom resource types and they
30+
can be validated that way, make them implement the new `SelfCheckingResourceInterface`.
2831

2932
2.7.0
3033
-----

0 commit comments

Comments
 (0)
0