From 8234f2add4a01001d5e1a9ac1f84ee634f1a6154 Mon Sep 17 00:00:00 2001 From: Oliver Hoff Date: Wed, 28 Sep 2016 20:37:03 +0200 Subject: [PATCH] #17580 compound forms without children should be considered rendered implicitly --- src/Symfony/Component/Form/FormView.php | 8 ++- .../Extension/Core/Type/FormTypeTest.php | 61 +++++++++++++++++-- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Form/FormView.php b/src/Symfony/Component/Form/FormView.php index 401288cf83..73e38d358e 100644 --- a/src/Symfony/Component/Form/FormView.php +++ b/src/Symfony/Component/Form/FormView.php @@ -65,8 +65,12 @@ class FormView implements \ArrayAccess, \IteratorAggregate, \Countable */ public function isRendered() { - if (true === $this->rendered || 0 === count($this->children)) { - return $this->rendered; + if ($this->rendered) { + return true; + } + + if (isset($this->vars['compound']) ? !$this->vars['compound'] : 0 === count($this->children)) { + return false; } foreach ($this->children as $child) { diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php index 2b4b255b0d..d7c5cb4050 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php @@ -488,16 +488,67 @@ class FormTypeTest extends BaseTypeTest $this->assertTrue($view->vars['multipart']); } - public function testViewIsNotRenderedByDefault() + public function testViewIsConsideredRenderedForRenderedNonCompoundForms() { - $view = $this->factory->createBuilder('form') - ->add('foo', 'form') - ->getForm() - ->createView(); + $view = $this->factory->createBuilder('form', null, array( + 'compound' => false, + )) + ->getForm() + ->createView(); + + $view->setRendered(); + + $this->assertTrue($view->isRendered()); + } + + public function testViewIsNotConsideredRenderedImplicitlyForNonCompoundForms() + { + $view = $this->factory->createBuilder('form', null, array( + 'compound' => false, + )) + ->getForm() + ->createView(); $this->assertFalse($view->isRendered()); } + public function testViewIsNotConsideredRenderedImplicitlyForCompoundFormsWithNonCompoundChildren() + { + $view = $this->factory->createBuilder('form') + ->add('foo', 'form', array( + 'compound' => false, + )) + ->getForm() + ->createView(); + + $this->assertFalse($view->isRendered()); + } + + public function testViewIsConsideredRenderedImplicitlyForCompoundFormsWithRenderedNonCompoundChildren() + { + $view = $this->factory->createBuilder('form') + ->add('foo', 'form', array( + 'compound' => false, + )) + ->getForm() + ->createView(); + + foreach ($view as $child) { + $child->setRendered(); + } + + $this->assertTrue($view->isRendered()); + } + + public function testViewIsConsideredRenderedImplicitlyForCompoundFormsWithoutChildren() + { + $view = $this->factory->createBuilder('form') + ->getForm() + ->createView(); + + $this->assertTrue($view->isRendered()); + } + public function testErrorBubblingIfCompound() { $form = $this->factory->create('form', null, array(