Skip to content

Commit 22437d4

Browse files
Merge branch '4.4'
* 4.4: [PhpUnitBridge] fix running simple-phpunit on Windows fixed UPGRADE fixed phpdocs fixed phpdocs [ErrorCatcher] Fixed some escaping in XML errors [Messenger] fix broken key normalization [FrameworkBundle] Allow creating chained cache pools by providing several adapters [FrameworkBundle] Use default_locale as default value for translator.fallbacks
2 parents 885a192 + 09e3cef commit 22437d4

File tree

14 files changed

+179
-22
lines changed

14 files changed

+179
-22
lines changed

UPGRADE-5.0.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,9 @@ Process
339339
PropertyAccess
340340
--------------
341341

342-
* Removed support of passing `null` as 2nd argument of `PropertyAccessor::createCache()` method (`$defaultLifetime`), pass `0` instead.
342+
* Removed support of passing `null` as 2nd argument of
343+
`PropertyAccessor::createCache()` method (`$defaultLifetime`), pass `0`
344+
instead.
343345

344346
Routing
345347
-------

src/Symfony/Bridge/PhpUnit/bin/simple-phpunit.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,9 @@
130130
}
131131
$prevRoot = getenv('COMPOSER_ROOT_VERSION');
132132
putenv("COMPOSER_ROOT_VERSION=$PHPUNIT_VERSION.99");
133+
$q = '\\' === DIRECTORY_SEPARATOR ? '"' : '';
133134
// --no-suggest is not in the list to keep compat with composer 1.0, which is shipped with Ubuntu 16.04LTS
134-
$exit = proc_close(proc_open("$COMPOSER install --no-dev --prefer-dist --no-progress --ansi", array(), $p, getcwd()));
135+
$exit = proc_close(proc_open("$q$COMPOSER install --no-dev --prefer-dist --no-progress --ansi$q", array(), $p, getcwd()));
135136
putenv('COMPOSER_ROOT_VERSION'.(false !== $prevRoot ? '='.$prevRoot : ''));
136137
if ($exit) {
137138
exit($exit);

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ CHANGELOG
2525
* Deprecated the `$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()`
2626
* Deprecated the `controller_name_converter` and `resolve_controller_name_subscriber` services
2727
* The `ControllerResolver` and `DelegatingLoader` classes have been marked as `final`
28+
* Added support for configuring chained cache pools
2829

2930
4.3.0
3031
-----

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -639,9 +639,10 @@ private function addTranslatorSection(ArrayNodeDefinition $rootNode)
639639
->fixXmlConfig('path')
640640
->children()
641641
->arrayNode('fallbacks')
642+
->info('Defaults to the value of "default_locale".')
642643
->beforeNormalization()->ifString()->then(function ($v) { return [$v]; })->end()
643644
->prototype('scalar')->end()
644-
->defaultValue(['en'])
645+
->defaultValue([])
645646
->end()
646647
->booleanNode('logging')->defaultValue(false)->end()
647648
->scalarNode('formatter')->defaultValue('translator.formatter.default')->end()
@@ -846,8 +847,38 @@ private function addCacheSection(ArrayNodeDefinition $rootNode)
846847
->arrayNode('pools')
847848
->useAttributeAsKey('name')
848849
->prototype('array')
850+
->fixXmlConfig('adapter')
851+
->beforeNormalization()
852+
->ifTrue(function ($v) { return (isset($v['adapters']) || \is_array($v['adapter'] ?? null)) && isset($v['provider']); })
853+
->thenInvalid('Pool cannot have a "provider" while "adapter" is set to a map')
854+
->end()
849855
->children()
850-
->scalarNode('adapter')->defaultValue('cache.app')->end()
856+
->arrayNode('adapters')
857+
->info('One or more adapters to chain for creating the pool, defaults to "cache.app".')
858+
->beforeNormalization()
859+
->always()->then(function ($values) {
860+
if ([0] === array_keys($values) && \is_array($values[0])) {
861+
return $values[0];
862+
}
863+
$adapters = [];
864+
865+
foreach ($values as $k => $v) {
866+
if (\is_int($k) && \is_string($v)) {
867+
$adapters[] = $v;
868+
} elseif (!\is_array($v)) {
869+
$adapters[$k] = $v;
870+
} elseif (isset($v['provider'])) {
871+
$adapters[$v['provider']] = $v['name'] ?? $v;
872+
} else {
873+
$adapters[] = $v['name'] ?? $v;
874+
}
875+
}
876+
877+
return $adapters;
878+
})
879+
->end()
880+
->prototype('scalar')->end()
881+
->end()
851882
->scalarNode('tags')->defaultNull()->end()
852883
->booleanNode('public')->defaultFalse()->end()
853884
->integerNode('default_lifetime')->end()
@@ -967,6 +998,7 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode)
967998
->end()
968999
->children()
9691000
->arrayNode('routing')
1001+
->normalizeKeys(false)
9701002
->useAttributeAsKey('message_class')
9711003
->beforeNormalization()
9721004
->always()
@@ -1026,6 +1058,7 @@ function ($a) {
10261058
->end()
10271059
->end()
10281060
->arrayNode('transports')
1061+
->normalizeKeys(false)
10291062
->useAttributeAsKey('name')
10301063
->arrayPrototype()
10311064
->beforeNormalization()
@@ -1073,6 +1106,7 @@ function ($a) {
10731106
->scalarNode('default_bus')->defaultNull()->end()
10741107
->arrayNode('buses')
10751108
->defaultValue(['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]])
1109+
->normalizeKeys(false)
10761110
->useAttributeAsKey('name')
10771111
->arrayPrototype()
10781112
->addDefaultsIfNotSet()

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Symfony\Component\Cache\Adapter\AbstractAdapter;
2929
use Symfony\Component\Cache\Adapter\AdapterInterface;
3030
use Symfony\Component\Cache\Adapter\ArrayAdapter;
31+
use Symfony\Component\Cache\Adapter\ChainAdapter;
3132
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
3233
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
3334
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
@@ -278,7 +279,7 @@ public function load(array $configs, ContainerBuilder $container)
278279
$this->registerEsiConfiguration($config['esi'], $container, $loader);
279280
$this->registerSsiConfiguration($config['ssi'], $container, $loader);
280281
$this->registerFragmentsConfiguration($config['fragments'], $container, $loader);
281-
$this->registerTranslatorConfiguration($config['translator'], $container, $loader);
282+
$this->registerTranslatorConfiguration($config['translator'], $container, $loader, $config['default_locale']);
282283
$this->registerProfilerConfiguration($config['profiler'], $container, $loader);
283284
$this->registerCacheConfiguration($config['cache'], $container);
284285
$this->registerWorkflowConfiguration($config['workflows'], $container, $loader);
@@ -952,7 +953,7 @@ private function createVersion(ContainerBuilder $container, $version, $format, $
952953
return new Reference('assets.empty_version_strategy');
953954
}
954955

955-
private function registerTranslatorConfiguration(array $config, ContainerBuilder $container, LoaderInterface $loader)
956+
private function registerTranslatorConfiguration(array $config, ContainerBuilder $container, LoaderInterface $loader, string $defaultLocale)
956957
{
957958
if (!$this->isConfigEnabled($container, $config)) {
958959
$container->removeDefinition('console.command.translation_debug');
@@ -967,7 +968,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
967968
$container->setAlias('translator', 'translator.default')->setPublic(true);
968969
$container->setAlias('translator.formatter', new Alias($config['formatter'], false));
969970
$translator = $container->findDefinition('translator.default');
970-
$translator->addMethodCall('setFallbackLocales', [$config['fallbacks']]);
971+
$translator->addMethodCall('setFallbackLocales', [$config['fallbacks'] ?: [$defaultLocale]]);
971972

972973
$container->setParameter('translator.logging', $config['logging']);
973974
$container->setParameter('translator.default_path', $config['default_path']);
@@ -1650,16 +1651,29 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
16501651
}
16511652
foreach (['app', 'system'] as $name) {
16521653
$config['pools']['cache.'.$name] = [
1653-
'adapter' => $config[$name],
1654+
'adapters' => [$config[$name]],
16541655
'public' => true,
16551656
'tags' => false,
16561657
];
16571658
}
16581659
foreach ($config['pools'] as $name => $pool) {
1659-
if ($config['pools'][$pool['adapter']]['tags'] ?? false) {
1660-
$pool['adapter'] = '.'.$pool['adapter'].'.inner';
1660+
$pool['adapters'] = $pool['adapters'] ?: ['cache.app'];
1661+
1662+
foreach ($pool['adapters'] as $provider => $adapter) {
1663+
if ($config['pools'][$adapter]['tags'] ?? false) {
1664+
$pool['adapters'][$provider] = $adapter = '.'.$adapter.'.inner';
1665+
}
1666+
}
1667+
1668+
if (1 === \count($pool['adapters'])) {
1669+
if (!isset($pool['provider']) && !\is_int($provider)) {
1670+
$pool['provider'] = $provider;
1671+
}
1672+
$definition = new ChildDefinition($adapter);
1673+
} else {
1674+
$definition = new Definition(ChainAdapter::class, [$pool['adapters'], 0]);
1675+
$pool['reset'] = 'reset';
16611676
}
1662-
$definition = new ChildDefinition($pool['adapter']);
16631677

16641678
if ($pool['tags']) {
16651679
if (true !== $pool['tags'] && ($config['pools'][$pool['tags']]['tags'] ?? false)) {
@@ -1690,7 +1704,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
16901704
}
16911705

16921706
$definition->setPublic($pool['public']);
1693-
unset($pool['adapter'], $pool['public'], $pool['tags']);
1707+
unset($pool['adapters'], $pool['public'], $pool['tags']);
16941708

16951709
$definition->addTag('cache.pool', $pool);
16961710
$container->setDefinition($name, $definition);

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,10 @@
256256
</xsd:complexType>
257257

258258
<xsd:complexType name="cache_pool">
259+
<xsd:sequence>
260+
<xsd:element name="adapter" type="cache_pool_adapter" minOccurs="0" maxOccurs="unbounded" />
261+
</xsd:sequence>
262+
259263
<xsd:attribute name="name" type="xsd:string" use="required" />
260264
<xsd:attribute name="adapter" type="xsd:string" />
261265
<xsd:attribute name="tags" type="xsd:string" />
@@ -265,6 +269,11 @@
265269
<xsd:attribute name="clearer" type="xsd:string" />
266270
</xsd:complexType>
267271

272+
<xsd:complexType name="cache_pool_adapter">
273+
<xsd:attribute name="name" type="xsd:string" use="required" />
274+
<xsd:attribute name="provider" type="xsd:string" />
275+
</xsd:complexType>
276+
268277
<xsd:complexType name="workflow">
269278
<xsd:sequence>
270279
<xsd:element name="initial-marking" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ protected static function getBundleDefaultConfig()
232232
],
233233
'translator' => [
234234
'enabled' => !class_exists(FullStack::class),
235-
'fallbacks' => ['en'],
235+
'fallbacks' => [],
236236
'logging' => false,
237237
'formatter' => 'translator.formatter.default',
238238
'paths' => [],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@
2424
'cache.def' => [
2525
'default_lifetime' => 11,
2626
],
27+
'cache.chain' => [
28+
'default_lifetime' => 12,
29+
'adapter' => [
30+
'cache.adapter.array',
31+
'cache.adapter.filesystem',
32+
'redis://foo' => 'cache.adapter.redis',
33+
],
34+
],
2735
],
2836
],
2937
]);

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
<framework:pool name="cache.baz" adapter="cache.adapter.filesystem" default-lifetime="7" />
1313
<framework:pool name="cache.foobar" adapter="cache.adapter.psr6" default-lifetime="10" provider="app.cache_pool" />
1414
<framework:pool name="cache.def" default-lifetime="11" />
15+
<framework:pool name="cache.chain" default-lifetime="12">
16+
<framework:adapter name="cache.adapter.array" />
17+
<framework:adapter name="cache.adapter.filesystem" />
18+
<framework:adapter name="cache.adapter.redis" provider="redis://foo" />
19+
</framework:pool>
1520
</framework:cache>
1621
</framework:config>
1722
</container>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@ framework:
1717
provider: app.cache_pool
1818
cache.def:
1919
default_lifetime: 11
20+
cache.chain:
21+
default_lifetime: 12
22+
adapter:
23+
- cache.adapter.array
24+
- cache.adapter.filesystem
25+
- {name: cache.adapter.redis, provider: 'redis://foo'}

0 commit comments

Comments
 (0)