[FrameworkBundle] Fixed validator factory definition when the Validator API is "auto" for PHP < 5.3.9
This commit is contained in:
parent
0801a3a8f0
commit
a74b758ca2
@ -457,8 +457,8 @@ class Configuration implements ConfigurationInterface
|
|||||||
->booleanNode('strict_email')->defaultFalse()->end()
|
->booleanNode('strict_email')->defaultFalse()->end()
|
||||||
->enumNode('api')
|
->enumNode('api')
|
||||||
->values(array('2.4', '2.5', '2.5-bc', 'auto'))
|
->values(array('2.4', '2.5', '2.5-bc', 'auto'))
|
||||||
->defaultValue('auto')
|
|
||||||
->beforeNormalization()
|
->beforeNormalization()
|
||||||
|
// XML/YAML parse as numbers, not as strings
|
||||||
->ifTrue(function ($v) { return is_scalar($v); })
|
->ifTrue(function ($v) { return is_scalar($v); })
|
||||||
->then(function ($v) { return (string) $v; })
|
->then(function ($v) { return (string) $v; })
|
||||||
->end()
|
->end()
|
||||||
@ -466,6 +466,21 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
->validate()
|
||||||
|
->ifTrue(function ($v) { return !isset($v['validation']['api']) || 'auto' === $v['validation']['api']; })
|
||||||
|
->then(function ($v) {
|
||||||
|
// This condition is duplicated in ValidatorBuilder. This
|
||||||
|
// duplication is necessary in order to know the desired
|
||||||
|
// API version already during container configuration
|
||||||
|
// (to adjust service classes etc.)
|
||||||
|
// See https://github.com/symfony/symfony/issues/11580
|
||||||
|
$v['validation']['api'] = version_compare(PHP_VERSION, '5.3.9', '<')
|
||||||
|
? '2.4'
|
||||||
|
: '2.5-bc';
|
||||||
|
|
||||||
|
return $v;
|
||||||
|
})
|
||||||
|
->end()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,7 +714,6 @@ class FrameworkExtension extends Extension
|
|||||||
$validatorBuilder->addMethodCall('setMetadataCache', array(new Reference('validator.mapping.cache.'.$config['cache'])));
|
$validatorBuilder->addMethodCall('setMetadataCache', array(new Reference('validator.mapping.cache.'.$config['cache'])));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('auto' !== $config['api']) {
|
|
||||||
switch ($config['api']) {
|
switch ($config['api']) {
|
||||||
case '2.4':
|
case '2.4':
|
||||||
$api = Validation::API_VERSION_2_4;
|
$api = Validation::API_VERSION_2_4;
|
||||||
@ -728,7 +727,10 @@ class FrameworkExtension extends Extension
|
|||||||
}
|
}
|
||||||
|
|
||||||
$validatorBuilder->addMethodCall('setApiVersion', array($api));
|
$validatorBuilder->addMethodCall('setApiVersion', array($api));
|
||||||
}
|
|
||||||
|
// You can use this parameter to check the API version in your own
|
||||||
|
// bundle extension classes
|
||||||
|
$container->setParameter('validator.api', $api);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getValidatorXmlMappingFiles(ContainerBuilder $container)
|
private function getValidatorXmlMappingFiles(ContainerBuilder $container)
|
||||||
|
@ -129,7 +129,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
|
|||||||
'static_method' => array('loadValidatorMetadata'),
|
'static_method' => array('loadValidatorMetadata'),
|
||||||
'translation_domain' => 'validators',
|
'translation_domain' => 'validators',
|
||||||
'strict_email' => false,
|
'strict_email' => false,
|
||||||
'api' => 'auto',
|
'api' => version_compare(PHP_VERSION, '5.3.9', '<') ? '2.4' : '2.5-bc',
|
||||||
),
|
),
|
||||||
'annotations' => array(
|
'annotations' => array(
|
||||||
'cache' => 'file',
|
'cache' => 'file',
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => 's3cr3t',
|
||||||
|
'validation' => array(
|
||||||
|
'enabled' => true,
|
||||||
|
'api' => '2.5',
|
||||||
|
),
|
||||||
|
));
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => 's3cr3t',
|
||||||
|
'validation' => array(
|
||||||
|
'enabled' => true,
|
||||||
|
'api' => '2.5-bc',
|
||||||
|
),
|
||||||
|
));
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => 's3cr3t',
|
||||||
|
'validation' => array(
|
||||||
|
'enabled' => true,
|
||||||
|
'api' => 'auto',
|
||||||
|
),
|
||||||
|
));
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => 's3cr3t',
|
||||||
|
'validation' => array(
|
||||||
|
'enabled' => true,
|
||||||
|
),
|
||||||
|
));
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
|
||||||
|
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||||
|
|
||||||
|
<framework:config secret="s3cr3t">
|
||||||
|
<framework:validation enabled="true" api="2.5" />
|
||||||
|
</framework:config>
|
||||||
|
</container>
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
|
||||||
|
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||||
|
|
||||||
|
<framework:config secret="s3cr3t">
|
||||||
|
<framework:validation enabled="true" api="2.5-bc" />
|
||||||
|
</framework:config>
|
||||||
|
</container>
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
|
||||||
|
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||||
|
|
||||||
|
<framework:config secret="s3cr3t">
|
||||||
|
<framework:validation enabled="true" api="auto" />
|
||||||
|
</framework:config>
|
||||||
|
</container>
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
|
||||||
|
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||||
|
|
||||||
|
<framework:config secret="s3cr3t">
|
||||||
|
<framework:validation enabled="true" />
|
||||||
|
</framework:config>
|
||||||
|
</container>
|
@ -0,0 +1,5 @@
|
|||||||
|
framework:
|
||||||
|
secret: s3cr3t
|
||||||
|
validation:
|
||||||
|
enabled: true
|
||||||
|
api: 2.5
|
@ -0,0 +1,5 @@
|
|||||||
|
framework:
|
||||||
|
secret: s3cr3t
|
||||||
|
validation:
|
||||||
|
enabled: true
|
||||||
|
api: 2.5-bc
|
@ -0,0 +1,5 @@
|
|||||||
|
framework:
|
||||||
|
secret: s3cr3t
|
||||||
|
validation:
|
||||||
|
enabled: true
|
||||||
|
api: auto
|
@ -0,0 +1,4 @@
|
|||||||
|
framework:
|
||||||
|
secret: s3cr3t
|
||||||
|
validation:
|
||||||
|
enabled: true
|
@ -265,7 +265,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
$this->assertCount(6, $calls);
|
$this->assertCount(7, $calls);
|
||||||
$this->assertSame('setConstraintValidatorFactory', $calls[0][0]);
|
$this->assertSame('setConstraintValidatorFactory', $calls[0][0]);
|
||||||
$this->assertEquals(array(new Reference('validator.validator_factory')), $calls[0][1]);
|
$this->assertEquals(array(new Reference('validator.validator_factory')), $calls[0][1]);
|
||||||
$this->assertSame('setTranslator', $calls[1][0]);
|
$this->assertSame('setTranslator', $calls[1][0]);
|
||||||
@ -278,6 +278,13 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||||
$this->assertSame('setMetadataCache', $calls[5][0]);
|
$this->assertSame('setMetadataCache', $calls[5][0]);
|
||||||
$this->assertEquals(array(new Reference('validator.mapping.cache.apc')), $calls[5][1]);
|
$this->assertEquals(array(new Reference('validator.mapping.cache.apc')), $calls[5][1]);
|
||||||
|
$this->assertSame('setApiVersion', $calls[6][0]);
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.3.9', '<')) {
|
||||||
|
$this->assertEquals(array(Validation::API_VERSION_2_4), $calls[6][1]);
|
||||||
|
} else {
|
||||||
|
$this->assertEquals(array(Validation::API_VERSION_2_5_BC), $calls[6][1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFullyConfiguredValidationService()
|
public function testFullyConfiguredValidationService()
|
||||||
@ -319,7 +326,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
$this->assertCount(6, $calls);
|
$this->assertCount(7, $calls);
|
||||||
$this->assertSame('enableAnnotationMapping', $calls[4][0]);
|
$this->assertSame('enableAnnotationMapping', $calls[4][0]);
|
||||||
$this->assertEquals(array(new Reference('annotation_reader')), $calls[4][1]);
|
$this->assertEquals(array(new Reference('annotation_reader')), $calls[4][1]);
|
||||||
$this->assertSame('addMethodMapping', $calls[5][0]);
|
$this->assertSame('addMethodMapping', $calls[5][0]);
|
||||||
@ -337,7 +344,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
$this->assertCount(7, $calls);
|
$this->assertCount(8, $calls);
|
||||||
$this->assertSame('addXmlMappings', $calls[3][0]);
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
$this->assertSame('addYamlMappings', $calls[4][0]);
|
$this->assertSame('addYamlMappings', $calls[4][0]);
|
||||||
$this->assertSame('enableAnnotationMapping', $calls[5][0]);
|
$this->assertSame('enableAnnotationMapping', $calls[5][0]);
|
||||||
@ -360,12 +367,12 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
$this->assertCount(4, $calls);
|
$this->assertCount(5, $calls);
|
||||||
$this->assertSame('addXmlMappings', $calls[3][0]);
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
// no cache, no annotations, no static methods
|
// no cache, no annotations, no static methods
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testValidationApiVersion()
|
public function testValidation2Dot4Api()
|
||||||
{
|
{
|
||||||
$container = $this->createContainerFromFile('validation_2_4_api');
|
$container = $this->createContainerFromFile('validation_2_4_api');
|
||||||
|
|
||||||
@ -380,6 +387,80 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
// no cache, no annotations
|
// no cache, no annotations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testValidation2Dot5Api()
|
||||||
|
{
|
||||||
|
$container = $this->createContainerFromFile('validation_2_5_api');
|
||||||
|
|
||||||
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
|
$this->assertCount(6, $calls);
|
||||||
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
|
$this->assertSame('addMethodMapping', $calls[4][0]);
|
||||||
|
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||||
|
$this->assertSame('setApiVersion', $calls[5][0]);
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_5), $calls[5][1]);
|
||||||
|
// no cache, no annotations
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testValidation2Dot5BcApi()
|
||||||
|
{
|
||||||
|
$container = $this->createContainerFromFile('validation_2_5_bc_api');
|
||||||
|
|
||||||
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
|
$this->assertCount(6, $calls);
|
||||||
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
|
$this->assertSame('addMethodMapping', $calls[4][0]);
|
||||||
|
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||||
|
$this->assertSame('setApiVersion', $calls[5][0]);
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_5_BC), $calls[5][1]);
|
||||||
|
// no cache, no annotations
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testValidationImplicitApi()
|
||||||
|
{
|
||||||
|
$container = $this->createContainerFromFile('validation_implicit_api');
|
||||||
|
|
||||||
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
|
$this->assertCount(6, $calls);
|
||||||
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
|
$this->assertSame('addMethodMapping', $calls[4][0]);
|
||||||
|
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||||
|
$this->assertSame('setApiVersion', $calls[5][0]);
|
||||||
|
// no cache, no annotations
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.3.9', '<')) {
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_4), $calls[5][1]);
|
||||||
|
} else {
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_5_BC), $calls[5][1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This feature is equivalent to the implicit api, only that the "api"
|
||||||
|
* key is explicitly set to "auto".
|
||||||
|
*/
|
||||||
|
public function testValidationAutoApi()
|
||||||
|
{
|
||||||
|
$container = $this->createContainerFromFile('validation_auto_api');
|
||||||
|
|
||||||
|
$calls = $container->getDefinition('validator.builder')->getMethodCalls();
|
||||||
|
|
||||||
|
$this->assertCount(6, $calls);
|
||||||
|
$this->assertSame('addXmlMappings', $calls[3][0]);
|
||||||
|
$this->assertSame('addMethodMapping', $calls[4][0]);
|
||||||
|
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||||
|
$this->assertSame('setApiVersion', $calls[5][0]);
|
||||||
|
// no cache, no annotations
|
||||||
|
|
||||||
|
if (version_compare(PHP_VERSION, '5.3.9', '<')) {
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_4), $calls[5][1]);
|
||||||
|
} else {
|
||||||
|
$this->assertSame(array(Validation::API_VERSION_2_5_BC), $calls[5][1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function testFormsCanBeEnabledWithoutCsrfProtection()
|
public function testFormsCanBeEnabledWithoutCsrfProtection()
|
||||||
{
|
{
|
||||||
$container = $this->createContainerFromFile('form_no_csrf');
|
$container = $this->createContainerFromFile('form_no_csrf');
|
||||||
|
Reference in New Issue
Block a user