Skip to content

Commit 06e4c90

Browse files
committed
feature #60952 [Form] Remove BC layer from ResizeFormListener (OskarStark)
This PR was squashed before being merged into the 8.0 branch. Discussion ---------- [Form] Remove BC layer from `ResizeFormListener` | Q | A | ------------- | --- | Branch? | 8.0 | Bug fix? | no | New feature? | no | Deprecations? | no | Issues | -- | License | MIT Commits ------- 1812cfa [Form] Remove BC layer from `ResizeFormListener`
2 parents 704572a + 1812cfa commit 06e4c90

File tree

5 files changed

+8
-109
lines changed

5 files changed

+8
-109
lines changed

UPGRADE-8.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ Form
168168

169169
* Made `ResizeFormListener::postSetData()` method `final`
170170
* Remove the `VersionAwareTest` trait, use feature detection instead
171+
* Remove deprecated `ResizeFormListener::preSetData()` method, use `postSetData()` instead
171172

172173
FrameworkBundle
173174
---------------

src/Symfony/Component/Form/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ CHANGELOG
66

77
* Change default value of `default_protocol` option in `UrlType` from `'http'` to `null`
88
* Remove the `VersionAwareTest` trait, use feature detection instead
9+
* Remove deprecated `ResizeFormListener::preSetData()` method, use `postSetData()` instead
910

1011
7.4
1112
---

src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ class ResizeFormListener implements EventSubscriberInterface
2828
protected array $prototypeOptions;
2929

3030
private \Closure|bool $deleteEmpty;
31-
// BC, to be removed in 8.0
32-
private bool $overridden = true;
33-
private bool $usePreSetData = false;
3431

3532
public function __construct(
3633
private string $type,
@@ -48,7 +45,6 @@ public function __construct(
4845
public static function getSubscribedEvents(): array
4946
{
5047
return [
51-
FormEvents::PRE_SET_DATA => 'preSetData', // deprecated
5248
FormEvents::POST_SET_DATA => ['postSetData', 255], // as early as possible
5349
FormEvents::PRE_SUBMIT => 'preSubmit',
5450
// (MergeCollectionListener, MergeDoctrineCollectionListener)
@@ -57,46 +53,11 @@ public static function getSubscribedEvents(): array
5753
}
5854

5955
/**
60-
* @deprecated Since Symfony 7.2, use {@see postSetData()} instead.
56+
*
57+
* @final since Symfony 7.2
6158
*/
62-
public function preSetData(FormEvent $event): void
59+
public function postSetData(PostSetDataEvent $event): void
6360
{
64-
if (__CLASS__ === static::class
65-
|| __CLASS__ === (new \ReflectionClass($this))->getMethod('preSetData')->getDeclaringClass()->name
66-
) {
67-
// not a child class, or child class does not overload PRE_SET_DATA
68-
return;
69-
}
70-
71-
trigger_deprecation('symfony/form', '7.2', 'Calling "%s()" is deprecated, use "%s::postSetData()" instead.', __METHOD__, __CLASS__);
72-
// parent::preSetData() has been called
73-
$this->overridden = false;
74-
try {
75-
$this->postSetData($event);
76-
} finally {
77-
$this->usePreSetData = true;
78-
}
79-
}
80-
81-
/**
82-
* Remove FormEvent type hint in 8.0.
83-
*/
84-
final public function postSetData(FormEvent|PostSetDataEvent $event): void
85-
{
86-
if (__CLASS__ !== static::class) {
87-
if ($this->overridden) {
88-
trigger_deprecation('symfony/form', '7.2', 'Calling "%s::preSetData()" is deprecated, use "%s::postSetData()" instead.', static::class, __CLASS__);
89-
// parent::preSetData() has not been called, noop
90-
91-
return;
92-
}
93-
94-
if ($this->usePreSetData) {
95-
// nothing else to do
96-
return;
97-
}
98-
}
99-
10061
$form = $event->getForm();
10162
$data = $event->getData() ?? [];
10263

src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php

Lines changed: 3 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Symfony\Component\Form\Extension\Core\Type\TextType;
2222
use Symfony\Component\Form\FormBuilder;
2323
use Symfony\Component\Form\FormBuilderInterface;
24+
use Symfony\Component\Form\Event\PostSetDataEvent;
2425
use Symfony\Component\Form\FormEvent;
2526
use Symfony\Component\Form\FormFactoryBuilder;
2627
use Symfony\Component\Form\FormFactoryInterface;
@@ -43,35 +44,6 @@ protected function getBuilder($name = 'name')
4344
return new FormBuilder($name, null, new EventDispatcher(), $this->factory);
4445
}
4546

46-
/**
47-
* @group legacy
48-
*/
49-
public function testPreSetDataResizesForm()
50-
{
51-
$this->builder->add($this->getBuilder('0'));
52-
$this->builder->add($this->getBuilder('1'));
53-
$this->builder->addEventSubscriber(new class(TextType::class, ['attr' => ['maxlength' => 10]], false, false) extends ResizeFormListener {
54-
public function preSetData(FormEvent $event): void
55-
{
56-
parent::preSetData($event);
57-
}
58-
});
59-
60-
$form = $this->builder->getForm();
61-
62-
$this->assertTrue($form->has('0'));
63-
64-
// initialize the form
65-
$form->setData([1 => 'string', 2 => 'string']);
66-
67-
$this->assertFalse($form->has('0'));
68-
$this->assertTrue($form->has('1'));
69-
$this->assertTrue($form->has('2'));
70-
71-
$this->assertSame('string', $form->get('1')->getData());
72-
$this->assertSame('string', $form->get('2')->getData());
73-
}
74-
7547
public function testPostSetDataResizesForm()
7648
{
7749
$this->builder->add($this->getBuilder('0'));
@@ -93,54 +65,19 @@ public function testPostSetDataResizesForm()
9365
$this->assertSame('string', $form->get('2')->getData());
9466
}
9567

96-
/**
97-
* @group legacy
98-
*/
99-
public function testPreSetDataRequiresArrayOrTraversable()
100-
{
101-
$this->expectException(UnexpectedTypeException::class);
102-
$data = 'no array or traversable';
103-
$event = new FormEvent($this->builder->getForm(), $data);
104-
$listener = new class(TextType::class, [], false, false) extends ResizeFormListener {
105-
public function preSetData(FormEvent $event): void
106-
{
107-
parent::preSetData($event);
108-
}
109-
};
110-
$listener->preSetData($event);
111-
}
112-
11368
public function testPostSetDataRequiresArrayOrTraversable()
11469
{
11570
$this->expectException(UnexpectedTypeException::class);
11671
$data = 'no array or traversable';
117-
$event = new FormEvent($this->builder->getForm(), $data);
72+
$event = new PostSetDataEvent($this->builder->getForm(), $data);
11873
$listener = new ResizeFormListener(TextType::class, [], false, false);
11974
$listener->postSetData($event);
12075
}
12176

122-
/**
123-
* @group legacy
124-
*/
125-
public function testPreSetDataDealsWithNullData()
126-
{
127-
$data = null;
128-
$event = new FormEvent($this->builder->getForm(), $data);
129-
$listener = new class(TextType::class, [], false, false) extends ResizeFormListener {
130-
public function preSetData(FormEvent $event): void
131-
{
132-
parent::preSetData($event);
133-
}
134-
};
135-
$listener->preSetData($event);
136-
137-
$this->assertSame(0, $this->builder->count());
138-
}
139-
14077
public function testPostSetDataDealsWithNullData()
14178
{
14279
$data = null;
143-
$event = new FormEvent($this->builder->getForm(), $data);
80+
$event = new PostSetDataEvent($this->builder->getForm(), $data);
14481
$listener = new ResizeFormListener(TextType::class, [], false, false);
14582
$listener->postSetData($event);
14683

src/Symfony/Component/Form/composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
],
1818
"require": {
1919
"php": ">=8.4",
20-
"symfony/deprecation-contracts": "^2.5|^3",
2120
"symfony/event-dispatcher": "^7.4|^8.0",
2221
"symfony/options-resolver": "^7.4|^8.0",
2322
"symfony/polyfill-ctype": "^1.8",

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