[DoctrineBridge] fixed bc layer from #18069
This commit is contained in:
parent
6857c36576
commit
8a6cf9d93e
@ -27,8 +27,9 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
|||||||
*/
|
*/
|
||||||
class MergeDoctrineCollectionListener implements EventSubscriberInterface
|
class MergeDoctrineCollectionListener implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
// Keeps BC. To be removed in 4.0
|
// Keep BC. To be removed in 4.0
|
||||||
private $bc = true;
|
private $bc = true;
|
||||||
|
private $bcLayer = false;
|
||||||
|
|
||||||
public static function getSubscribedEvents()
|
public static function getSubscribedEvents()
|
||||||
{
|
{
|
||||||
@ -36,8 +37,7 @@ class MergeDoctrineCollectionListener implements EventSubscriberInterface
|
|||||||
// is called before
|
// is called before
|
||||||
return array(
|
return array(
|
||||||
FormEvents::SUBMIT => array(
|
FormEvents::SUBMIT => array(
|
||||||
// BC
|
array('onBind', 10), // deprecated
|
||||||
array('onBind', 10),
|
|
||||||
array('onSubmit', 5),
|
array('onSubmit', 5),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -45,11 +45,14 @@ class MergeDoctrineCollectionListener implements EventSubscriberInterface
|
|||||||
|
|
||||||
public function onSubmit(FormEvent $event)
|
public function onSubmit(FormEvent $event)
|
||||||
{
|
{
|
||||||
// If onBind() is overridden then logic has been executed
|
|
||||||
if ($this->bc) {
|
if ($this->bc) {
|
||||||
|
// onBind() has been overridden from a child class
|
||||||
@trigger_error('The onBind() method is deprecated since version 3.1 and will be removed in 4.0. Use the onSubmit() method instead.', E_USER_DEPRECATED);
|
@trigger_error('The onBind() method is deprecated since version 3.1 and will be removed in 4.0. Use the onSubmit() method instead.', E_USER_DEPRECATED);
|
||||||
|
|
||||||
return;
|
if (!$this->bcLayer) {
|
||||||
|
// If parent::onBind() has not been called, then logic has been executed
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$collection = $event->getForm()->getData();
|
$collection = $event->getForm()->getData();
|
||||||
@ -68,10 +71,13 @@ class MergeDoctrineCollectionListener implements EventSubscriberInterface
|
|||||||
* @deprecated since version 3.1, to be removed in 4.0.
|
* @deprecated since version 3.1, to be removed in 4.0.
|
||||||
* Use {@link onSubmit()} instead.
|
* Use {@link onSubmit()} instead.
|
||||||
*/
|
*/
|
||||||
public function onBind()
|
public function onBind(FormEvent $event)
|
||||||
{
|
{
|
||||||
if (__CLASS__ === get_class($this)) {
|
if (__CLASS__ === get_class($this)) {
|
||||||
$this->bc = false;
|
$this->bc = false;
|
||||||
|
} else {
|
||||||
|
// parent::onBind() has been called
|
||||||
|
$this->bcLayer = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ use Symfony\Component\Form\FormBuilder;
|
|||||||
use Symfony\Component\Form\FormEvent;
|
use Symfony\Component\Form\FormEvent;
|
||||||
use Symfony\Component\Form\FormEvents;
|
use Symfony\Component\Form\FormEvents;
|
||||||
|
|
||||||
class MergeDoctrineCollectionTest extends \PHPUnit_Framework_TestCase
|
class MergeDoctrineCollectionListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
/** @var \Doctrine\Common\Collections\ArrayCollection */
|
/** @var \Doctrine\Common\Collections\ArrayCollection */
|
||||||
private $collection;
|
private $collection;
|
||||||
@ -77,4 +77,37 @@ class MergeDoctrineCollectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$this->assertTrue($this->collection->isEmpty());
|
$this->assertTrue($this->collection->isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
|
public function testLegacyChildClassOnSubmitCallParent()
|
||||||
|
{
|
||||||
|
$form = $this->getBuilder('name')
|
||||||
|
->setData($this->collection)
|
||||||
|
->addEventSubscriber(new TestClassExtendingMergeDoctrineCollectionListener())
|
||||||
|
->getForm();
|
||||||
|
$submittedData = array();
|
||||||
|
$event = new FormEvent($form, $submittedData);
|
||||||
|
|
||||||
|
$this->dispatcher->dispatch(FormEvents::SUBMIT, $event);
|
||||||
|
|
||||||
|
$this->assertTrue($this->collection->isEmpty());
|
||||||
|
$this->assertTrue(TestClassExtendingMergeDoctrineCollectionListener::$onBindCalled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
|
class TestClassExtendingMergeDoctrineCollectionListener extends MergeDoctrineCollectionListener
|
||||||
|
{
|
||||||
|
public static $onBindCalled = false;
|
||||||
|
|
||||||
|
public function onBind(FormEvent $event)
|
||||||
|
{
|
||||||
|
self::$onBindCalled = true;
|
||||||
|
|
||||||
|
parent::onBind($event);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user