From 675e5ded9ebd8684bd1ff6fba1df835892da7f88 Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Sun, 24 Apr 2011 10:54:50 +0200 Subject: [PATCH] [Form] Changed FormBuilder::build() to FormBuilder::create(). You hvae to pass the resulting builder to FormBuilder::add() manually now $builder->add( $builder->create('child', 'form') ->add('foo', 'text') ->add('bar', 'text') ); --- src/Symfony/Component/Form/FormBuilder.php | 56 ++++++------------- .../Tests/Component/Form/FormBuilderTest.php | 4 +- 2 files changed, 19 insertions(+), 41 deletions(-) diff --git a/src/Symfony/Component/Form/FormBuilder.php b/src/Symfony/Component/Form/FormBuilder.php index f5158b0925..c41415e0a0 100644 --- a/src/Symfony/Component/Form/FormBuilder.php +++ b/src/Symfony/Component/Form/FormBuilder.php @@ -40,8 +40,6 @@ class FormBuilder private $types = array(); - private $parent; - private $dataClass; private $children = array(); @@ -70,23 +68,6 @@ class FormBuilder return $this->name; } - public function setParent(FormBuilder $builder) - { - $this->parent = $builder; - - return $this; - } - - public function getParent() - { - return $this->parent; - } - - public function end() - { - return $this->parent; - } - public function setData($data) { $this->data = $data; @@ -341,17 +322,23 @@ class FormBuilder * @param array $options * @return FormInterface */ - public function add($name, $type = null, array $options = array()) + public function add($child, $type = null, array $options = array()) { - if (!is_string($name)) { - throw new UnexpectedTypeException($name, 'string'); + if ($child instanceof self) { + $this->children[$child->getName()] = $child; + + return $this; + } + + if (!is_string($child)) { + throw new UnexpectedTypeException($child, 'string or Symfony\Component\Form\FormBuilder'); } if (null !== $type && !is_string($type) && !$type instanceof FormTypeInterface) { throw new UnexpectedTypeException($type, 'string or Symfony\Component\Form\FormTypeInterface'); } - $this->children[$name] = array( + $this->children[$child] = array( 'type' => $type, 'options' => $options, ); @@ -359,7 +346,7 @@ class FormBuilder return $this; } - public function build($name, $type = null, array $options = array()) + public function create($name, $type = null, array $options = array()) { if (null !== $type) { $builder = $this->getFormFactory()->createNamedBuilder( @@ -381,10 +368,6 @@ class FormBuilder ); } - $this->children[$name] = $builder; - - $builder->setParent($this); - return $builder; } @@ -394,13 +377,13 @@ class FormBuilder throw new FormException(sprintf('The field "%s" does not exist', $name)); } - $child = $this->children[$name]; - - if ($child instanceof FormBuilder) { - return $child; + if (!$this->children[$name] instanceof FormBuilder) { + $this->children[$name] = $this->create($name, + $this->children[$name]['type'], + $this->children[$name]['options']); } - return $this->build($name, $child['type'], $child['options']); + return $this->children[$name]; } /** @@ -411,11 +394,6 @@ class FormBuilder public function remove($name) { if (isset($this->children[$name])) { - // field might still be lazy - if ($this->children[$name] instanceof FormInterface) { - $this->children[$name]->setParent(null); - } - unset($this->children[$name]); } } @@ -442,7 +420,7 @@ class FormBuilder foreach ($this->children as $name => $builder) { if (!$builder instanceof FormBuilder) { - $builder = $this->build($name, $builder['type'], $builder['options']); + $builder = $this->create($name, $builder['type'], $builder['options']); } $children[$builder->getName()] = $builder->getForm(); diff --git a/tests/Symfony/Tests/Component/Form/FormBuilderTest.php b/tests/Symfony/Tests/Component/Form/FormBuilderTest.php index 9c7349df87..e90f3e0383 100644 --- a/tests/Symfony/Tests/Component/Form/FormBuilderTest.php +++ b/tests/Symfony/Tests/Component/Form/FormBuilderTest.php @@ -95,10 +95,10 @@ class FormBuilderTest extends \PHPUnit_Framework_TestCase $this->assertFalse($this->builder->has('foo')); } - public function testBuildNoTypeNoDataClass() + public function testCreateNoTypeNoDataClass() { $this->setExpectedException('Symfony\Component\Form\Exception\FormException', 'The data class must be set to automatically create children'); - $this->builder->build('foo'); + $this->builder->create('foo'); } public function testGetUnknown()