bug #24025 Use new configuration depreciation method (sanpii, chalasr)
This PR was merged into the 3.4 branch. Discussion ---------- Use new configuration depreciation method | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | no | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | no | Fixed tickets | N/A | License | MIT | Doc PR | N/A In keeping with #22382 Commits -------4a62cc6
Do not trigger deprecation if node has not been explicitly filled012e381
Use new configuration node depreciation method
This commit is contained in:
commit
c9bee848c5
@ -66,10 +66,9 @@ class Configuration implements ConfigurationInterface
|
||||
->defaultTrue()
|
||||
->end()
|
||||
->arrayNode('trusted_proxies')
|
||||
->setDeprecated('The "%path%.%node%" configuration key has been deprecated in Symfony 3.3. Use the Request::setTrustedProxies() method in your front controller instead.')
|
||||
->beforeNormalization()
|
||||
->ifTrue(function ($v) {
|
||||
@trigger_error('The "framework.trusted_proxies" configuration key has been deprecated in Symfony 3.3. Use the Request::setTrustedProxies() method in your front controller instead.', E_USER_DEPRECATED);
|
||||
|
||||
return !is_array($v) && null !== $v;
|
||||
})
|
||||
->then(function ($v) { return is_bool($v) ? array() : preg_split('/\s*,\s*/', $v); })
|
||||
@ -663,8 +662,9 @@ class Configuration implements ConfigurationInterface
|
||||
->{!class_exists(FullStack::class) && class_exists(Validation::class) ? 'canBeDisabled' : 'canBeEnabled'}()
|
||||
->children()
|
||||
->scalarNode('cache')
|
||||
// Can be removed in 4.0, when validator.mapping.cache.doctrine.apc is removed
|
||||
->setDeprecated('The "%path%.%node%" option is deprecated since Symfony 3.2 and will be removed in 4.0. Configure the "cache.validator" service under "framework.cache.pools" instead.')
|
||||
->beforeNormalization()
|
||||
// Can be removed in 4.0, when validator.mapping.cache.doctrine.apc is removed
|
||||
->ifString()->then(function ($v) {
|
||||
if ('validator.mapping.cache.doctrine.apc' === $v && !class_exists('Doctrine\Common\Cache\ApcCache')) {
|
||||
throw new LogicException('Doctrine APC cache for the validator cannot be enabled as the Doctrine Cache package is not installed.');
|
||||
@ -727,7 +727,9 @@ class Configuration implements ConfigurationInterface
|
||||
->{!class_exists(FullStack::class) && class_exists(Serializer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
|
||||
->children()
|
||||
->booleanNode('enable_annotations')->{!class_exists(FullStack::class) && class_exists(Annotation::class) ? 'defaultTrue' : 'defaultFalse'}()->end()
|
||||
->scalarNode('cache')->end()
|
||||
->scalarNode('cache')
|
||||
->setDeprecated('The "%path%.%node%" option is deprecated since Symfony 3.1 and will be removed in 4.0. Configure the "cache.serializer" service under "framework.cache.pools" instead.')
|
||||
->end()
|
||||
->scalarNode('name_converter')->end()
|
||||
->scalarNode('circular_reference_handler')->end()
|
||||
->arrayNode('mapping')
|
||||
|
@ -1198,8 +1198,6 @@ class FrameworkExtension extends Extension
|
||||
}
|
||||
|
||||
if (isset($config['cache']) && $config['cache']) {
|
||||
@trigger_error('The "framework.validation.cache" option is deprecated since Symfony 3.2 and will be removed in 4.0. Configure the "cache.validator" service under "framework.cache.pools" instead.', E_USER_DEPRECATED);
|
||||
|
||||
$container->setParameter(
|
||||
'validator.mapping.cache.prefix',
|
||||
'validator_'.$this->getKernelRootHash($container)
|
||||
@ -1454,8 +1452,6 @@ class FrameworkExtension extends Extension
|
||||
$container->getDefinition('serializer.mapping.cache_warmer')->replaceArgument(0, $serializerLoaders);
|
||||
|
||||
if (isset($config['cache']) && $config['cache']) {
|
||||
@trigger_error('The "framework.serializer.cache" option is deprecated since Symfony 3.1 and will be removed in 4.0. Configure the "cache.serializer" service under "framework.cache.pools" instead.', E_USER_DEPRECATED);
|
||||
|
||||
$container->setParameter(
|
||||
'serializer.mapping.cache.prefix',
|
||||
'serializer_'.$this->getKernelRootHash($container)
|
||||
|
@ -21,7 +21,7 @@
|
||||
"symfony/cache": "~3.4|~4.0",
|
||||
"symfony/class-loader": "~3.2",
|
||||
"symfony/dependency-injection": "~3.4|~4.0",
|
||||
"symfony/config": "~3.3|~4.0",
|
||||
"symfony/config": "~3.4|~4.0",
|
||||
"symfony/event-dispatcher": "^3.3.1|~4.0",
|
||||
"symfony/http-foundation": "~3.3|~4.0",
|
||||
"symfony/http-kernel": "~3.4|~4.0",
|
||||
|
@ -234,10 +234,6 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
||||
}
|
||||
|
||||
foreach ($this->children as $name => $child) {
|
||||
if ($child->isDeprecated()) {
|
||||
@trigger_error($child->getDeprecationMessage($name, $this->getPath()), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if (!array_key_exists($name, $value)) {
|
||||
if ($child->isRequired()) {
|
||||
$msg = sprintf('The child node "%s" at path "%s" must be configured.', $name, $this->getPath());
|
||||
@ -254,6 +250,10 @@ class ArrayNode extends BaseNode implements PrototypeNodeInterface
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($child->isDeprecated()) {
|
||||
@trigger_error($child->getDeprecationMessage($name, $this->getPath()), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
try {
|
||||
$value[$name] = $child->finalize($value[$name]);
|
||||
} catch (UnsetKeyException $e) {
|
||||
|
@ -84,10 +84,6 @@ class VariableNode extends BaseNode implements PrototypeNodeInterface
|
||||
*/
|
||||
protected function finalizeValue($value)
|
||||
{
|
||||
if ($this->deprecationMessage) {
|
||||
@trigger_error($this->getDeprecationMessage($this->getName(), $this->getPath()), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
if (!$this->allowEmptyValue && $this->isValueEmpty($value)) {
|
||||
$ex = new InvalidConfigurationException(sprintf(
|
||||
'The path "%s" cannot contain an empty value, but got %s.',
|
||||
|
@ -219,10 +219,33 @@ class ArrayNodeTest extends TestCase
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$node = new ArrayNode('foo');
|
||||
$node->setDeprecated('"%node%" is deprecated');
|
||||
$childNode = new ArrayNode('foo');
|
||||
$childNode->setDeprecated('"%node%" is deprecated');
|
||||
|
||||
$this->assertTrue($node->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $node->getDeprecationMessage($node->getName(), $node->getPath()));
|
||||
$this->assertTrue($childNode->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
|
||||
|
||||
$node = new ArrayNode('root');
|
||||
$node->addChild($childNode);
|
||||
|
||||
$deprecationTriggered = false;
|
||||
$deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
|
||||
if (E_USER_DEPRECATED === $level) {
|
||||
return $deprecationTriggered = true;
|
||||
}
|
||||
|
||||
return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
|
||||
};
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array());
|
||||
restore_error_handler();
|
||||
|
||||
$this->assertFalse($deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array('foo' => array()));
|
||||
restore_error_handler();
|
||||
$this->assertTrue($deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\ArrayNode;
|
||||
use Symfony\Component\Config\Definition\ScalarNode;
|
||||
|
||||
class ScalarNodeTest extends TestCase
|
||||
@ -42,11 +43,33 @@ class ScalarNodeTest extends TestCase
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$node = new ScalarNode('foo');
|
||||
$node->setDeprecated('"%node%" is deprecated');
|
||||
$childNode = new ScalarNode('foo');
|
||||
$childNode->setDeprecated('"%node%" is deprecated');
|
||||
|
||||
$this->assertTrue($node->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $node->getDeprecationMessage($node->getName(), $node->getPath()));
|
||||
$this->assertTrue($childNode->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
|
||||
|
||||
$node = new ArrayNode('root');
|
||||
$node->addChild($childNode);
|
||||
|
||||
$deprecationTriggered = 0;
|
||||
$deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
|
||||
if (E_USER_DEPRECATED === $level) {
|
||||
return ++$deprecationTriggered;
|
||||
}
|
||||
|
||||
return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
|
||||
};
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array());
|
||||
restore_error_handler();
|
||||
$this->assertSame(0, $deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array('foo' => ''));
|
||||
restore_error_handler();
|
||||
$this->assertSame(1, $deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user