Skip to content

Commit 2ccecbe

Browse files
committed
feature #33791 [Form] Added CountryType option for using alpha3 country codes (creiner)
This PR was squashed before being merged into the 4.4 branch (closes #33791). Discussion ---------- [Form] Added CountryType option for using alpha3 country codes | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Fixes #20313 | License | MIT | Doc PR | - In the linked issue #20313 was a proposal to add an alpha3 option to the country type. Here it is.. Hopefully I've made no mistake, so when the code is fine, I will create a documentation PR.. :-) Commits ------- d07f5a3 [Form] Added CountryType option for using alpha3 country codes
2 parents e95fa01 + d07f5a3 commit 2ccecbe

File tree

5 files changed

+81
-5
lines changed

5 files changed

+81
-5
lines changed

src/Symfony/Component/Form/Extension/Core/Type/CountryType.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,19 @@ public function configureOptions(OptionsResolver $resolver)
4242
$resolver->setDefaults([
4343
'choice_loader' => function (Options $options) {
4444
$choiceTranslationLocale = $options['choice_translation_locale'];
45+
$alpha3 = $options['alpha3'];
4546

46-
return new IntlCallbackChoiceLoader(function () use ($choiceTranslationLocale) {
47-
return array_flip(Countries::getNames($choiceTranslationLocale));
47+
return new IntlCallbackChoiceLoader(function () use ($choiceTranslationLocale, $alpha3) {
48+
return array_flip($alpha3 ? Countries::getAlpha3Names($choiceTranslationLocale) : Countries::getNames($choiceTranslationLocale));
4849
});
4950
},
5051
'choice_translation_domain' => false,
5152
'choice_translation_locale' => null,
53+
'alpha3' => false,
5254
]);
5355

5456
$resolver->setAllowedTypes('choice_translation_locale', ['null', 'string']);
57+
$resolver->setAllowedTypes('alpha3', 'bool');
5558
}
5659

5760
/**

src/Symfony/Component/Form/Extension/Core/Type/LanguageType.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,19 @@ public function configureOptions(OptionsResolver $resolver)
4242
$resolver->setDefaults([
4343
'choice_loader' => function (Options $options) {
4444
$choiceTranslationLocale = $options['choice_translation_locale'];
45+
$alpha3 = $options['alpha3'];
4546

46-
return new IntlCallbackChoiceLoader(function () use ($choiceTranslationLocale) {
47-
return array_flip(Languages::getNames($choiceTranslationLocale));
47+
return new IntlCallbackChoiceLoader(function () use ($choiceTranslationLocale, $alpha3) {
48+
return array_flip($alpha3 ? Languages::getAlpha3Names($choiceTranslationLocale) : Languages::getNames($choiceTranslationLocale));
4849
});
4950
},
5051
'choice_translation_domain' => false,
5152
'choice_translation_locale' => null,
53+
'alpha3' => false,
5254
]);
5355

5456
$resolver->setAllowedTypes('choice_translation_locale', ['null', 'string']);
57+
$resolver->setAllowedTypes('alpha3', 'bool');
5558
}
5659

5760
/**

src/Symfony/Component/Form/Tests/Extension/Core/Type/CountryTypeTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,42 @@ public function testChoiceTranslationLocaleOption()
5858
$this->assertContainsEquals(new ChoiceView('MY', 'MY', 'Малайзія'), $choices);
5959
}
6060

61+
public function testAlpha3Option()
62+
{
63+
$choices = $this->factory
64+
->create(static::TESTED_TYPE, null, [
65+
'alpha3' => true,
66+
])
67+
->createView()->vars['choices'];
68+
69+
// Don't check objects for identity
70+
$this->assertContainsEquals(new ChoiceView('DEU', 'DEU', 'Germany'), $choices);
71+
$this->assertContainsEquals(new ChoiceView('GBR', 'GBR', 'United Kingdom'), $choices);
72+
$this->assertContainsEquals(new ChoiceView('USA', 'USA', 'United States'), $choices);
73+
$this->assertContainsEquals(new ChoiceView('FRA', 'FRA', 'France'), $choices);
74+
$this->assertContainsEquals(new ChoiceView('MYS', 'MYS', 'Malaysia'), $choices);
75+
}
76+
77+
/**
78+
* @requires extension intl
79+
*/
80+
public function testChoiceTranslationLocaleAndAlpha3Option()
81+
{
82+
$choices = $this->factory
83+
->create(static::TESTED_TYPE, null, [
84+
'choice_translation_locale' => 'uk',
85+
'alpha3' => true,
86+
])
87+
->createView()->vars['choices'];
88+
89+
// Don't check objects for identity
90+
$this->assertContainsEquals(new ChoiceView('DEU', 'DEU', 'Німеччина'), $choices);
91+
$this->assertContainsEquals(new ChoiceView('GBR', 'GBR', 'Велика Британія'), $choices);
92+
$this->assertContainsEquals(new ChoiceView('USA', 'USA', 'Сполучені Штати'), $choices);
93+
$this->assertContainsEquals(new ChoiceView('FRA', 'FRA', 'Франція'), $choices);
94+
$this->assertContainsEquals(new ChoiceView('MYS', 'MYS', 'Малайзія'), $choices);
95+
}
96+
6197
public function testUnknownCountryIsNotIncluded()
6298
{
6399
$choices = $this->factory->create(static::TESTED_TYPE, 'country')

src/Symfony/Component/Form/Tests/Extension/Core/Type/LanguageTypeTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,40 @@ public function testChoiceTranslationLocaleOption()
5353
$this->assertContainsEquals(new ChoiceView('my', 'my', 'бірманська'), $choices);
5454
}
5555

56+
public function testAlpha3Option()
57+
{
58+
$choices = $this->factory
59+
->create(static::TESTED_TYPE, null, [
60+
'alpha3' => true,
61+
])
62+
->createView()->vars['choices'];
63+
64+
// Don't check objects for identity
65+
$this->assertContainsEquals(new ChoiceView('eng', 'eng', 'English'), $choices);
66+
$this->assertContainsEquals(new ChoiceView('fra', 'fra', 'French'), $choices);
67+
// Burmese has no three letter language code
68+
$this->assertNotContainsEquals(new ChoiceView('my', 'my', 'Burmese'), $choices);
69+
}
70+
71+
/**
72+
* @requires extension intl
73+
*/
74+
public function testChoiceTranslationLocaleAndAlpha3Option()
75+
{
76+
$choices = $this->factory
77+
->create(static::TESTED_TYPE, null, [
78+
'choice_translation_locale' => 'uk',
79+
'alpha3' => true,
80+
])
81+
->createView()->vars['choices'];
82+
83+
// Don't check objects for identity
84+
$this->assertContainsEquals(new ChoiceView('eng', 'eng', 'англійська'), $choices);
85+
$this->assertContainsEquals(new ChoiceView('fra', 'fra', 'французька'), $choices);
86+
// Burmese has no three letter language code
87+
$this->assertNotContainsEquals(new ChoiceView('my', 'my', 'бірманська'), $choices);
88+
}
89+
5690
public function testMultipleLanguagesIsNotIncluded()
5791
{
5892
$choices = $this->factory->create(static::TESTED_TYPE, 'language')

src/Symfony/Component/Form/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"require": {
1919
"php": "^7.1.3",
2020
"symfony/event-dispatcher": "^4.3",
21-
"symfony/intl": "^4.3|^5.0",
21+
"symfony/intl": "^4.4|^5.0",
2222
"symfony/options-resolver": "~4.3|^5.0",
2323
"symfony/polyfill-ctype": "~1.8",
2424
"symfony/polyfill-mbstring": "~1.0",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy