Inserting a Hidden Date Field in a Symfony Form
Overview[edit]
This demonstrates creating and using a data transformation class in Symfony forms.[1]
DataTransformer class[edit]
// src/YourBundle/Form/DataTransformer/DateTimeToStringTransformer
namespace YourProject\YourBundle\Form\DataTransformer;
use Symfony\Component\Form\DataTransformerInterface;
class DateTimeToStringTransformer implements DataTransformerInterface
{
public function __construct()
{
}
/**
* @param \DateTime|null $datetime
* @return string
*/
public function transform($datetime)
{
if (null === $datetime) {
return '';
}
return $datetime->format('Y-m-d H:i:s');
}
/**
* @param string $datetimeString
* @return \DateTime
*/
public function reverseTransform($datetimeString)
{
$datetime = new \DateTime($datetimeString);
return $datetime;
}
}
[edit]
// src/YourBundle/Form/Type/HiddenDateTimeType.php
namespace YourProject\YourBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormBuilderInterface;
use YourProject\YourBundle\Form\DataTransformer\DateTimeToStringTransformer;
class HiddenDateTimeType extends AbstractType
{
public function __construct()
{
}
public function getName()
{
return 'hidden_datetime';
}
public function getParent()
{
return 'hidden';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new DateTimeToStringTransformer();
$builder->addModelTransformer($transformer);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
parent::setDefaultOptions($resolver);
$resolver->setDefaults(array(
));
}
}
Register the new field type as a service[edit]
# app/config.services.yml
# ...
yourproject.hidden_datetime.form.type:
class: YourProject\YourBundle\Form\Type\HiddenDateTimeType
tags:
- { name: form.type, alias: hidden_datetime }
Usage in forms[edit]
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('createdAt','hidden_datetime')
->add('comment','textarea');
}
Notes[edit]
- ↑ Symfony2, How to add a hidden date type field to a form?, Stackoverflow