Skip to content

Commit c988142

Browse files
committed
Merge branch '4.4' into 5.0
* 4.4: Add missing use statements [Translation] Add missing use statement [Translation] Add missing use statement [Config][XmlReferenceDumper] Prevent potential \TypeError [Mailer] Fix broken mandrill http send for recipients with names [Translation] prefer intl domain when adding messages to catalogue Fix CS Fix CS Fail on empty password verification (without warning on any implementation) [Translation][Debug] Add installation and minimal example to README [Validator] try to call __get method if property is uninitialized Show both missing packages in the same error message Fix handling of empty_data's \Closure value in Date/Time form types
2 parents c96f80b + ecd1984 commit c988142

File tree

6 files changed

+83
-13
lines changed

6 files changed

+83
-13
lines changed

Extension/Core/Type/DateTimeType.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,17 @@ public function buildForm(FormBuilderInterface $builder, array $options)
109109
'invalid_message_parameters',
110110
]));
111111

112-
if (isset($emptyData['date'])) {
112+
if ($emptyData instanceof \Closure) {
113+
$lazyEmptyData = static function ($option) use ($emptyData) {
114+
return static function (FormInterface $form) use ($emptyData, $option) {
115+
$emptyData = $emptyData($form->getParent());
116+
117+
return isset($emptyData[$option]) ? $emptyData[$option] : '';
118+
};
119+
};
120+
121+
$dateOptions['empty_data'] = $lazyEmptyData('date');
122+
} elseif (isset($emptyData['date'])) {
113123
$dateOptions['empty_data'] = $emptyData['date'];
114124
}
115125

@@ -128,7 +138,9 @@ public function buildForm(FormBuilderInterface $builder, array $options)
128138
'invalid_message_parameters',
129139
]));
130140

131-
if (isset($emptyData['time'])) {
141+
if ($emptyData instanceof \Closure) {
142+
$timeOptions['empty_data'] = $lazyEmptyData('time');
143+
} elseif (isset($emptyData['time'])) {
132144
$timeOptions['empty_data'] = $emptyData['time'];
133145
}
134146

Extension/Core/Type/DateType.php

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,28 @@ public function buildForm(FormBuilderInterface $builder, array $options)
8383
// so we need to handle the cascade setting here
8484
$emptyData = $builder->getEmptyData() ?: [];
8585

86-
if (isset($emptyData['year'])) {
87-
$yearOptions['empty_data'] = $emptyData['year'];
88-
}
89-
if (isset($emptyData['month'])) {
90-
$monthOptions['empty_data'] = $emptyData['month'];
91-
}
92-
if (isset($emptyData['day'])) {
93-
$dayOptions['empty_data'] = $emptyData['day'];
86+
if ($emptyData instanceof \Closure) {
87+
$lazyEmptyData = static function ($option) use ($emptyData) {
88+
return static function (FormInterface $form) use ($emptyData, $option) {
89+
$emptyData = $emptyData($form->getParent());
90+
91+
return isset($emptyData[$option]) ? $emptyData[$option] : '';
92+
};
93+
};
94+
95+
$yearOptions['empty_data'] = $lazyEmptyData('year');
96+
$monthOptions['empty_data'] = $lazyEmptyData('month');
97+
$dayOptions['empty_data'] = $lazyEmptyData('day');
98+
} else {
99+
if (isset($emptyData['year'])) {
100+
$yearOptions['empty_data'] = $emptyData['year'];
101+
}
102+
if (isset($emptyData['month'])) {
103+
$monthOptions['empty_data'] = $emptyData['month'];
104+
}
105+
if (isset($emptyData['day'])) {
106+
$dayOptions['empty_data'] = $emptyData['day'];
107+
}
94108
}
95109

96110
if (isset($options['invalid_message'])) {

Extension/Core/Type/TimeType.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,17 @@ public function buildForm(FormBuilderInterface $builder, array $options)
9494
// so we need to handle the cascade setting here
9595
$emptyData = $builder->getEmptyData() ?: [];
9696

97-
if (isset($emptyData['hour'])) {
97+
if ($emptyData instanceof \Closure) {
98+
$lazyEmptyData = static function ($option) use ($emptyData) {
99+
return static function (FormInterface $form) use ($emptyData, $option) {
100+
$emptyData = $emptyData($form->getParent());
101+
102+
return isset($emptyData[$option]) ? $emptyData[$option] : '';
103+
};
104+
};
105+
106+
$hourOptions['empty_data'] = $lazyEmptyData('hour');
107+
} elseif (isset($emptyData['hour'])) {
98108
$hourOptions['empty_data'] = $emptyData['hour'];
99109
}
100110

@@ -161,14 +171,18 @@ public function buildForm(FormBuilderInterface $builder, array $options)
161171
$builder->add('hour', self::$widgets[$options['widget']], $hourOptions);
162172

163173
if ($options['with_minutes']) {
164-
if (isset($emptyData['minute'])) {
174+
if ($emptyData instanceof \Closure) {
175+
$minuteOptions['empty_data'] = $lazyEmptyData('minute');
176+
} elseif (isset($emptyData['minute'])) {
165177
$minuteOptions['empty_data'] = $emptyData['minute'];
166178
}
167179
$builder->add('minute', self::$widgets[$options['widget']], $minuteOptions);
168180
}
169181

170182
if ($options['with_seconds']) {
171-
if (isset($emptyData['second'])) {
183+
if ($emptyData instanceof \Closure) {
184+
$secondOptions['empty_data'] = $lazyEmptyData('second');
185+
} elseif (isset($emptyData['second'])) {
172186
$secondOptions['empty_data'] = $emptyData['second'];
173187
}
174188
$builder->add('second', self::$widgets[$options['widget']], $secondOptions);

Tests/Extension/Core/Type/DateTimeTypeTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Form\Tests\Extension\Core\Type;
1313

1414
use Symfony\Component\Form\FormError;
15+
use Symfony\Component\Form\FormInterface;
1516

1617
class DateTimeTypeTest extends BaseTypeTest
1718
{
@@ -659,6 +660,9 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
659660
]);
660661
$form->submit(null);
661662

663+
if ($emptyData instanceof \Closure) {
664+
$emptyData = $emptyData($form);
665+
}
662666
$this->assertSame($emptyData, $form->getViewData());
663667
$this->assertEquals($expectedData, $form->getNormData());
664668
$this->assertEquals($expectedData, $form->getData());
@@ -667,11 +671,17 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
667671
public function provideEmptyData()
668672
{
669673
$expectedData = \DateTime::createFromFormat('Y-m-d H:i', '2018-11-11 21:23');
674+
$lazyEmptyData = static function (FormInterface $form) {
675+
return $form->getConfig()->getCompound() ? ['date' => ['year' => '2018', 'month' => '11', 'day' => '11'], 'time' => ['hour' => '21', 'minute' => '23']] : '2018-11-11T21:23:00';
676+
};
670677

671678
return [
672679
'Simple field' => ['single_text', '2018-11-11T21:23:00', $expectedData],
673680
'Compound text field' => ['text', ['date' => ['year' => '2018', 'month' => '11', 'day' => '11'], 'time' => ['hour' => '21', 'minute' => '23']], $expectedData],
674681
'Compound choice field' => ['choice', ['date' => ['year' => '2018', 'month' => '11', 'day' => '11'], 'time' => ['hour' => '21', 'minute' => '23']], $expectedData],
682+
'Simple field lazy' => ['single_text', $lazyEmptyData, $expectedData],
683+
'Compound text field lazy' => ['text', $lazyEmptyData, $expectedData],
684+
'Compound choice field lazy' => ['choice', $lazyEmptyData, $expectedData],
675685
];
676686
}
677687

Tests/Extension/Core/Type/DateTypeTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Form\ChoiceList\View\ChoiceView;
1515
use Symfony\Component\Form\FormError;
16+
use Symfony\Component\Form\FormInterface;
1617
use Symfony\Component\Intl\Util\IntlTestHelper;
1718

1819
class DateTypeTest extends BaseTypeTest
@@ -1022,6 +1023,9 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
10221023
]);
10231024
$form->submit(null);
10241025

1026+
if ($emptyData instanceof \Closure) {
1027+
$emptyData = $emptyData($form);
1028+
}
10251029
$this->assertSame($emptyData, $form->getViewData());
10261030
$this->assertEquals($expectedData, $form->getNormData());
10271031
$this->assertEquals($expectedData, $form->getData());
@@ -1030,11 +1034,17 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
10301034
public function provideEmptyData()
10311035
{
10321036
$expectedData = \DateTime::createFromFormat('Y-m-d H:i:s', '2018-11-11 00:00:00');
1037+
$lazyEmptyData = static function (FormInterface $form) {
1038+
return $form->getConfig()->getCompound() ? ['year' => '2018', 'month' => '11', 'day' => '11'] : '2018-11-11';
1039+
};
10331040

10341041
return [
10351042
'Simple field' => ['single_text', '2018-11-11', $expectedData],
10361043
'Compound text fields' => ['text', ['year' => '2018', 'month' => '11', 'day' => '11'], $expectedData],
10371044
'Compound choice fields' => ['choice', ['year' => '2018', 'month' => '11', 'day' => '11'], $expectedData],
1045+
'Simple field lazy' => ['single_text', $lazyEmptyData, $expectedData],
1046+
'Compound text fields lazy' => ['text', $lazyEmptyData, $expectedData],
1047+
'Compound choice fields lazy' => ['choice', $lazyEmptyData, $expectedData],
10381048
];
10391049
}
10401050

Tests/Extension/Core/Type/TimeTypeTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Form\ChoiceList\View\ChoiceView;
1515
use Symfony\Component\Form\FormError;
16+
use Symfony\Component\Form\FormInterface;
1617

1718
class TimeTypeTest extends BaseTypeTest
1819
{
@@ -928,6 +929,9 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
928929
]);
929930
$form->submit(null);
930931

932+
if ($emptyData instanceof \Closure) {
933+
$emptyData = $emptyData($form);
934+
}
931935
$this->assertSame($emptyData, $form->getViewData());
932936
$this->assertEquals($expectedData, $form->getNormData());
933937
$this->assertEquals($expectedData, $form->getData());
@@ -936,11 +940,17 @@ public function testSubmitNullUsesDateEmptyData($widget, $emptyData, $expectedDa
936940
public function provideEmptyData()
937941
{
938942
$expectedData = \DateTime::createFromFormat('Y-m-d H:i', '1970-01-01 21:23');
943+
$lazyEmptyData = static function (FormInterface $form) {
944+
return $form->getConfig()->getCompound() ? ['hour' => '21', 'minute' => '23'] : '21:23';
945+
};
939946

940947
return [
941948
'Simple field' => ['single_text', '21:23', $expectedData],
942949
'Compound text field' => ['text', ['hour' => '21', 'minute' => '23'], $expectedData],
943950
'Compound choice field' => ['choice', ['hour' => '21', 'minute' => '23'], $expectedData],
951+
'Simple field lazy' => ['single_text', $lazyEmptyData, $expectedData],
952+
'Compound text field lazy' => ['text', $lazyEmptyData, $expectedData],
953+
'Compound choice field lazy' => ['choice', $lazyEmptyData, $expectedData],
944954
];
945955
}
946956
}

0 commit comments

Comments
 (0)