[Form] Fixed: The "date", "time" and "datetime" types can be initialized with \DateTime objects
This commit is contained in:
parent
88ef52d272
commit
3b1b57030b
@ -158,6 +158,11 @@ class DateTimeType extends AbstractType
|
|||||||
'widget' => null,
|
'widget' => null,
|
||||||
// This will overwrite "empty_value" child options
|
// This will overwrite "empty_value" child options
|
||||||
'empty_value' => null,
|
'empty_value' => null,
|
||||||
|
// If initialized with a \DateTime object, FieldType initializes
|
||||||
|
// this option to "\DateTime". Since the internal, normalized
|
||||||
|
// representation is not \DateTime, but an array, we need to unset
|
||||||
|
// this option.
|
||||||
|
'data_class' => null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,6 +183,11 @@ class DateType extends AbstractType
|
|||||||
// them like immutable value objects
|
// them like immutable value objects
|
||||||
'by_reference' => false,
|
'by_reference' => false,
|
||||||
'error_bubbling' => false,
|
'error_bubbling' => false,
|
||||||
|
// If initialized with a \DateTime object, FieldType initializes
|
||||||
|
// this option to "\DateTime". Since the internal, normalized
|
||||||
|
// representation is not \DateTime, but an array, we need to unset
|
||||||
|
// this option.
|
||||||
|
'data_class' => null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,6 +156,11 @@ class TimeType extends AbstractType
|
|||||||
// them like immutable value objects
|
// them like immutable value objects
|
||||||
'by_reference' => false,
|
'by_reference' => false,
|
||||||
'error_bubbling' => false,
|
'error_bubbling' => false,
|
||||||
|
// If initialized with a \DateTime object, FieldType initializes
|
||||||
|
// this option to "\DateTime". Since the internal, normalized
|
||||||
|
// representation is not \DateTime, but an array, we need to unset
|
||||||
|
// this option.
|
||||||
|
'data_class' => null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,4 +258,12 @@ class DateTimeTypeTest extends LocalizedTestCase
|
|||||||
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['date']->getErrors());
|
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['date']->getErrors());
|
||||||
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['time']->getErrors());
|
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['time']->getErrors());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug fix
|
||||||
|
public function testInitializeWithDateTime()
|
||||||
|
{
|
||||||
|
// Throws an exception if "data_class" option is not explicitely set
|
||||||
|
// to null in the type
|
||||||
|
$form = $this->factory->create('datetime', new \DateTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -530,4 +530,12 @@ class DateTypeTest extends LocalizedTestCase
|
|||||||
|
|
||||||
$this->assertSame('single_text', $view->get('widget'));
|
$this->assertSame('single_text', $view->get('widget'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug fix
|
||||||
|
public function testInitializeWithDateTime()
|
||||||
|
{
|
||||||
|
// Throws an exception if "data_class" option is not explicitely set
|
||||||
|
// to null in the type
|
||||||
|
$form = $this->factory->create('date', new \DateTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,6 +221,42 @@ class FieldTypeTest extends TypeTestCase
|
|||||||
$this->assertEquals($author, $form->getData());
|
$this->assertEquals($author, $form->getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testBindWithEmptyDataCreatesObjectIfInitiallyBoundWithObject()
|
||||||
|
{
|
||||||
|
$form = $this->factory->create('form', null, array(
|
||||||
|
// data class is inferred from the passed object
|
||||||
|
'data' => new Author(),
|
||||||
|
'required' => false,
|
||||||
|
));
|
||||||
|
$form->add($this->factory->createNamed('field', 'firstName'));
|
||||||
|
$form->add($this->factory->createNamed('field', 'lastName'));
|
||||||
|
|
||||||
|
$form->setData(null);
|
||||||
|
// partially empty, still an object is created
|
||||||
|
$form->bind(array('firstName' => 'Bernhard', 'lastName' => ''));
|
||||||
|
|
||||||
|
$author = new Author();
|
||||||
|
$author->firstName = 'Bernhard';
|
||||||
|
$author->setLastName('');
|
||||||
|
|
||||||
|
$this->assertEquals($author, $form->getData());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBindWithEmptyDataDoesNotCreateObjectIfDataClassIsNull()
|
||||||
|
{
|
||||||
|
$form = $this->factory->create('form', null, array(
|
||||||
|
'data' => new Author(),
|
||||||
|
'data_class' => null,
|
||||||
|
'required' => false,
|
||||||
|
));
|
||||||
|
$form->add($this->factory->createNamed('field', 'firstName'));
|
||||||
|
|
||||||
|
$form->setData(null);
|
||||||
|
$form->bind(array('firstName' => 'Bernhard'));
|
||||||
|
|
||||||
|
$this->assertSame(array('firstName' => 'Bernhard'), $form->getData());
|
||||||
|
}
|
||||||
|
|
||||||
public function testBindEmptyWithEmptyDataCreatesNoObjectIfNotRequired()
|
public function testBindEmptyWithEmptyDataCreatesNoObjectIfNotRequired()
|
||||||
{
|
{
|
||||||
$form = $this->factory->create('form', null, array(
|
$form = $this->factory->create('form', null, array(
|
||||||
|
@ -401,4 +401,12 @@ class TimeTypeTest extends LocalizedTestCase
|
|||||||
|
|
||||||
$this->assertTrue($form->isPartiallyFilled());
|
$this->assertTrue($form->isPartiallyFilled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug fix
|
||||||
|
public function testInitializeWithDateTime()
|
||||||
|
{
|
||||||
|
// Throws an exception if "data_class" option is not explicitely set
|
||||||
|
// to null in the type
|
||||||
|
$form = $this->factory->create('time', new \DateTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user