Skip to content

Commit 56537bf

Browse files
committed
feature #25478 [FrameworkBundle] add email_validation_mode option (xabbuh)
This PR was merged into the 4.1-dev branch. Discussion ---------- [FrameworkBundle] add email_validation_mode option | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | | License | MIT | Doc PR | Commits ------- cda5825 add email_validation_mode option
2 parents 847fba4 + cda5825 commit 56537bf

18 files changed

+166
-5
lines changed

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

+23-1
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,27 @@ private function addValidationSection(ArrayNodeDefinition $rootNode)
645645
->arrayNode('validation')
646646
->info('validation configuration')
647647
->{!class_exists(FullStack::class) && class_exists(Validation::class) ? 'canBeDisabled' : 'canBeEnabled'}()
648+
->validate()
649+
->ifTrue(function ($v) { return isset($v['strict_email']) && isset($v['email_validation_mode']); })
650+
->thenInvalid('"strict_email" and "email_validation_mode" cannot be used together.')
651+
->end()
652+
->beforeNormalization()
653+
->ifTrue(function ($v) { return isset($v['strict_email']); })
654+
->then(function ($v) {
655+
@trigger_error('The "framework.validation.strict_email" configuration key has been deprecated in Symfony 4.1. Use the "framework.validation.email_validation_mode" configuration key instead.', E_USER_DEPRECATED);
656+
657+
return $v;
658+
})
659+
->end()
660+
->beforeNormalization()
661+
->ifTrue(function ($v) { return isset($v['strict_email']) && !isset($v['email_validation_mode']); })
662+
->then(function ($v) {
663+
$v['email_validation_mode'] = $v['strict_email'] ? 'strict' : 'loose';
664+
unset($v['strict_email']);
665+
666+
return $v;
667+
})
668+
->end()
648669
->children()
649670
->scalarNode('cache')->end()
650671
->booleanNode('enable_annotations')->{!class_exists(FullStack::class) && class_exists(Annotation::class) ? 'defaultTrue' : 'defaultFalse'}()->end()
@@ -658,7 +679,8 @@ private function addValidationSection(ArrayNodeDefinition $rootNode)
658679
->end()
659680
->end()
660681
->scalarNode('translation_domain')->defaultValue('validators')->end()
661-
->booleanNode('strict_email')->defaultFalse()->end()
682+
->booleanNode('strict_email')->end()
683+
->enumNode('email_validation_mode')->values(array('html5', 'loose', 'strict'))->end()
662684
->arrayNode('mapping')
663685
->addDefaultsIfNotSet()
664686
->fixXmlConfig('path')

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,10 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
976976
throw new LogicException('Validation support cannot be enabled as the Validator component is not installed.');
977977
}
978978

979+
if (!isset($config['email_validation_mode'])) {
980+
$config['email_validation_mode'] = 'loose';
981+
}
982+
979983
$loader->load('validator.xml');
980984

981985
$validatorBuilder = $container->getDefinition('validator.builder');
@@ -994,7 +998,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
994998
}
995999

9961000
$definition = $container->findDefinition('validator.email');
997-
$definition->replaceArgument(0, $config['strict_email']);
1001+
$definition->replaceArgument(0, $config['email_validation_mode']);
9981002

9991003
if (array_key_exists('enable_annotations', $config) && $config['enable_annotations']) {
10001004
if (!$this->annotationsConfigEnabled) {

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

+10
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@
199199
<xsd:attribute name="cache" type="xsd:string" />
200200
<xsd:attribute name="enable-annotations" type="xsd:boolean" />
201201
<xsd:attribute name="static-method" type="xsd:boolean" />
202+
<xsd:attribute name="strict-email" type="xsd:boolean" />
203+
<xsd:attribute name="email-validation-mode" type="email-validation-mode" />
202204
</xsd:complexType>
203205

204206
<xsd:complexType name="file_mapping">
@@ -207,6 +209,14 @@
207209
</xsd:sequence>
208210
</xsd:complexType>
209211

212+
<xsd:simpleType name="email-validation-mode">
213+
<xsd:restriction base="xsd:string">
214+
<xsd:enumeration value="html5" />
215+
<xsd:enumeration value="loose" />
216+
<xsd:enumeration value="strict" />
217+
</xsd:restriction>
218+
</xsd:simpleType>
219+
210220
<xsd:complexType name="annotations">
211221
<xsd:attribute name="cache" type="xsd:string" />
212222
<xsd:attribute name="debug" type="xsd:string" />

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

-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ protected static function getBundleDefaultConfig()
162162
'enable_annotations' => !class_exists(FullStack::class),
163163
'static_method' => array('loadValidatorMetadata'),
164164
'translation_domain' => 'validators',
165-
'strict_email' => false,
166165
'mapping' => array(
167166
'paths' => array(),
168167
),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'validation' => array(
5+
'email_validation_mode' => 'html5',
6+
),
7+
));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'validation' => array(
5+
'strict_email' => true,
6+
'email_validation_mode' => 'strict',
7+
),
8+
));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'validation' => array(
5+
'strict_email' => false,
6+
),
7+
));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'validation' => array(
5+
'strict_email' => true,
6+
),
7+
));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:validation email-validation-mode="html5" />
10+
</framework:config>
11+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:validation strict-email="true" email-validation-mode="strict" />
10+
</framework:config>
11+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:validation strict-email="false" />
10+
</framework:config>
11+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:validation strict-email="true" />
10+
</framework:config>
11+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
framework:
2+
validation:
3+
email_validation_mode: html5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
framework:
2+
validation:
3+
strict_email: true
4+
email_validation_mode: html5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
framework:
2+
validation:
3+
strict_email: false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
framework:
2+
validation:
3+
strict_email: true

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

+40
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,46 @@ public function testValidationNoStaticMethod()
695695
// no cache, no annotations, no static methods
696696
}
697697

698+
/**
699+
* @group legacy
700+
* @expectedDeprecation The "framework.validation.strict_email" configuration key has been deprecated in Symfony 4.1. Use the "framework.validation.email_validation_mode" configuration key instead.
701+
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
702+
* @expectedExceptionMessage "strict_email" and "email_validation_mode" cannot be used together.
703+
*/
704+
public function testCannotConfigureStrictEmailAndEmailValidationModeAtTheSameTime()
705+
{
706+
$this->createContainerFromFile('validation_strict_email_and_validation_mode');
707+
}
708+
709+
/**
710+
* @group legacy
711+
* @expectedDeprecation The "framework.validation.strict_email" configuration key has been deprecated in Symfony 4.1. Use the "framework.validation.email_validation_mode" configuration key instead.
712+
*/
713+
public function testEnabledStrictEmailOptionIsMappedToStrictEmailValidationMode()
714+
{
715+
$container = $this->createContainerFromFile('validation_strict_email_enabled');
716+
717+
$this->assertSame('strict', $container->getDefinition('validator.email')->getArgument(0));
718+
}
719+
720+
/**
721+
* @group legacy
722+
* @expectedDeprecation The "framework.validation.strict_email" configuration key has been deprecated in Symfony 4.1. Use the "framework.validation.email_validation_mode" configuration key instead.
723+
*/
724+
public function testDisabledStrictEmailOptionIsMappedToLooseEmailValidationMode()
725+
{
726+
$container = $this->createContainerFromFile('validation_strict_email_disabled');
727+
728+
$this->assertSame('loose', $container->getDefinition('validator.email')->getArgument(0));
729+
}
730+
731+
public function testEmailValidationModeIsPassedToEmailValidator()
732+
{
733+
$container = $this->createContainerFromFile('validation_email_validation_mode');
734+
735+
$this->assertSame('html5', $container->getDefinition('validator.email')->getArgument(0));
736+
}
737+
698738
public function testValidationMapping()
699739
{
700740
$container = $this->createContainerFromFile('validation_mapping');

src/Symfony/Bundle/FrameworkBundle/composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"symfony/stopwatch": "~3.4|~4.0",
4949
"symfony/translation": "~3.4|~4.0",
5050
"symfony/templating": "~3.4|~4.0",
51-
"symfony/validator": "~3.4|~4.0",
51+
"symfony/validator": "~4.1",
5252
"symfony/var-dumper": "~3.4|~4.0",
5353
"symfony/workflow": "~3.4|~4.0",
5454
"symfony/yaml": "~3.4|~4.0",
@@ -70,7 +70,7 @@
7070
"symfony/serializer": "<3.4",
7171
"symfony/stopwatch": "<3.4",
7272
"symfony/translation": "<3.4",
73-
"symfony/validator": "<3.4",
73+
"symfony/validator": "<4.1",
7474
"symfony/workflow": "<3.4"
7575
},
7676
"suggest": {

0 commit comments

Comments
 (0)