Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3c438bd

Browse files
committed
add email_validation_mode option
1 parent 72e189a commit 3c438bd

17 files changed

+194
-6
lines changed

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

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ public function getConfigTreeBuilder()
6363
return $v;
6464
})
6565
->end()
66+
->beforeNormalization()
67+
->ifTrue(function ($v) { return isset($v['form']) && (!isset($v['form']['enabled']) || $v['form']['enabled']); })
68+
->then(function ($v) {
69+
if (isset($v['validation']) && !is_array($v['validation'])) {
70+
$v['validation'] = array();
71+
}
72+
73+
$v['validation']['enabled'] = true;
74+
75+
return $v;
76+
})
77+
->end()
6678
->children()
6779
->scalarNode('secret')->end()
6880
->scalarNode('http_method_override')
@@ -645,6 +657,41 @@ private function addValidationSection(ArrayNodeDefinition $rootNode)
645657
->arrayNode('validation')
646658
->info('validation configuration')
647659
->{!class_exists(FullStack::class) && class_exists(Validation::class) ? 'canBeDisabled' : 'canBeEnabled'}()
660+
->validate()
661+
->ifTrue(function ($v) { return isset($v['strict_email']) && isset($v['email_validation_mode']); })
662+
->thenInvalid('"strict_email" and "email_validation_mode" cannot be used together.')
663+
->end()
664+
->beforeNormalization()
665+
->ifTrue(function ($v) { return isset($v['strict_email']); })
666+
->then(function ($v) {
667+
@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);
668+
669+
return $v;
670+
})
671+
->end()
672+
->beforeNormalization()
673+
->ifTrue(function ($v) { return isset($v['strict_email']) && !isset($v['email_validation_mode']); })
674+
->then(function ($v) {
675+
$v['email_validation_mode'] = $v['strict_email'] ? 'strict' : 'loose';
676+
unset($v['strict_email']);
677+
678+
return $v;
679+
})
680+
->end()
681+
->beforeNormalization()
682+
->ifTrue(function ($v) { return !isset($v['strict_email']) && !isset($v['email_validation_mode']); })
683+
->then(function ($v) {
684+
if (!is_array($v)) {
685+
$v = array(
686+
'enabled' => $v,
687+
);
688+
}
689+
690+
$v['email_validation_mode'] = 'loose';
691+
692+
return $v;
693+
})
694+
->end()
648695
->children()
649696
->scalarNode('cache')->end()
650697
->booleanNode('enable_annotations')->{!class_exists(FullStack::class) && class_exists(Annotation::class) ? 'defaultTrue' : 'defaultFalse'}()->end()
@@ -658,7 +705,8 @@ private function addValidationSection(ArrayNodeDefinition $rootNode)
658705
->end()
659706
->end()
660707
->scalarNode('translation_domain')->defaultValue('validators')->end()
661-
->booleanNode('strict_email')->defaultFalse()->end()
708+
->booleanNode('strict_email')->end()
709+
->enumNode('email_validation_mode')->values(array('html5', 'loose', 'strict'))->end()
662710
->arrayNode('mapping')
663711
->addDefaultsIfNotSet()
664712
->fixXmlConfig('path')

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,7 @@ public function load(array $configs, ContainerBuilder $container)
198198
$this->formConfigEnabled = true;
199199
$this->registerFormConfiguration($config, $container, $loader);
200200

201-
if (class_exists('Symfony\Component\Validator\Validation')) {
202-
$config['validation']['enabled'] = true;
203-
} else {
201+
if (!class_exists('Symfony\Component\Validator\Validation')) {
204202
$container->setParameter('validator.translation_domain', 'validators');
205203

206204
$container->removeDefinition('form.type_extension.form.validator');
@@ -994,7 +992,7 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
994992
}
995993

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

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

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

Lines changed: 10 additions & 0 deletions
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

Lines changed: 0 additions & 1 deletion
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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,13 @@ public function testFileLinkFormat()
597597
$this->assertEquals('file%link%format', $container->getParameter('debug.file_link_format'));
598598
}
599599

600+
public function testValidationIsEnabledWhenFormsAreEnabled()
601+
{
602+
$container = $this->createContainerFromFile('form_no_csrf');
603+
604+
$this->assertTrue($container->hasDefinition('validator.email'));
605+
}
606+
600607
public function testValidationAnnotations()
601608
{
602609
$container = $this->createContainerFromFile('validation_annotations');
@@ -695,6 +702,46 @@ public function testValidationNoStaticMethod()
695702
// no cache, no annotations, no static methods
696703
}
697704

705+
/**
706+
* @group legacy
707+
* @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.
708+
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
709+
* @expectedExceptionMessage "strict_email" and "email_validation_mode" cannot be used together.
710+
*/
711+
public function testCannotConfigureStrictEmailAndEmailValidationModeAtTheSameTime()
712+
{
713+
$this->createContainerFromFile('validation_strict_email_and_validation_mode');
714+
}
715+
716+
/**
717+
* @group legacy
718+
* @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.
719+
*/
720+
public function testEnabledStrictEmailOptionIsMappedToStrictEmailValidationMode()
721+
{
722+
$container = $this->createContainerFromFile('validation_strict_email_enabled');
723+
724+
$this->assertSame('strict', $container->getDefinition('validator.email')->getArgument(0));
725+
}
726+
727+
/**
728+
* @group legacy
729+
* @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.
730+
*/
731+
public function testDisabledStrictEmailOptionIsMappedToLooseEmailValidationMode()
732+
{
733+
$container = $this->createContainerFromFile('validation_strict_email_disabled');
734+
735+
$this->assertSame('loose', $container->getDefinition('validator.email')->getArgument(0));
736+
}
737+
738+
public function testEmailValidationModeIsPassedToEmailValidator()
739+
{
740+
$container = $this->createContainerFromFile('validation_email_validation_mode');
741+
742+
$this->assertSame('html5', $container->getDefinition('validator.email')->getArgument(0));
743+
}
744+
698745
public function testValidationMapping()
699746
{
700747
$container = $this->createContainerFromFile('validation_mapping');

0 commit comments

Comments
 (0)