Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two form fields into one entity value

Tags:

symfony

How its possible to join two separated fields (must be separated) in one form (date and time for example) to one entity propery datetime for persisting after form post ?

What is better way ? Data Transofmers ? Form events ? Form Model ? Manual setting all entity properties before persist ?

Entity:

<?php namespace Acme\DemoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="event")
 */
class EventEntity
{

    /**
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    // ...

    /**
     * @ORM\Column(name="date_time", type="datetime", nullable=false)
     */
    protected $datetime;

    public function getId()
    {
        return $this->id;
    }

    // ...

    public function getDateTime()
    {
        return $this->datetime;
    }

    public function setDateTime(\DateTime $datetime)
    {
        $this->datetime = $datetime;
    }

}

FormType:

<?php namespace Acme\DemoBundle\Form\Type;

use JMS\DiExtraBundle\Annotation as DI;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class EventType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('date', 'date', [
                    'required' => true,
                    'widget'   => 'single_text',
                    'format'   => 'dd.MM.yyyy'
                ]
            )
            ->add('time', 'time', [
                    'required' => false,
                    'widget'   => 'single_text'
                ]
            );
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\DemoBundle\Entity\EventEntity' //Acme\DemoBundle\Form\Model\EventModel ?
        ));
    }

    public function getName()
    {
        return 'event';
    }

}
like image 433
patie Avatar asked May 17 '26 02:05

patie


1 Answers

If you set the date and time widget seperately in the datetime type, then they get seperately rendered, but validated as one field.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('datetime', 'datetime', array(
            'date_widget' => 'single_text',
            'time_widget' => 'single_text',
            'date_format' => 'dd.MM.yyyy',
        ));
}
like image 192
Emii Khaos Avatar answered May 20 '26 06:05

Emii Khaos



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!