Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

symfony2: null date rendering

everyone

I’am having trouble with empty dates and forms in Symfony2.

When I create an entity with an empty date, it works fine, a NULL value is inserted in the database. But when I want to edit it, it renders as today, I found no way of rendering the empy_values

As expected, “preferred_choices” does not work because “date” is not a “choice”.

Seems that a new \DateTime() is called somewhere.

Index and show actions have no problem:

[index/show.html.twig]

            {% if entity.dueDate %}

            {{ entity.dueDate|date('Y-m-d') }}

            {% endif %}

If I ask in the controller, the behaviour is the expected one

[controller]

if (!$entity->getDueDate()) {

 // enters here when there is NULL in the database

}

Here is the entity and form definitions:

[entity]

/**

 * @var date $dueDate

 *

 * @ORM\Column(name="dueDate", type="date", nullable="true")

 */

private $dueDate;

[form]

  $builder->add('dueDate', 'date', array('label'=>'Due date', 'empty_value' => array('year' => '----', 'month' => '----', 'day' => '----'),'required'=>false))

Please give me a hint, thank you in advance.

There is a related question from 2011-06-26 with no answer in google groups

https://groups.google.com/forum/#!msg/symfony2/nLUmjKzMRVk/9NlOB1Xl5RwJ

http://groups.google.com/group/symfony2/browse_thread/thread/9cb5268caccc4559/1ce5e555074ed9f4?lnk=gst&q=empty+date+#1ce5e555074ed9f4

like image 437
user1375998 Avatar asked Feb 03 '26 07:02

user1375998


2 Answers

With modern version of Symfony you seem to need:

$builder->add('dueDate', DateType::class, array(
    'placeholder' => ['year' => '--', 'month' => '--', 'day' => '--']
)

empty_value has been replaced by placeholder and you need to pass an array with each "empty" value.

like image 120
a.l.e Avatar answered Feb 08 '26 21:02

a.l.e


You can solve this way:

$builder->add('dueDate', 'date', array(
   'label'=>'Due date', 
   'empty_value' => array('----'),
   'required'=>false
))

You were close to the solution.

like image 33
Francesco Donzello Avatar answered Feb 08 '26 23:02

Francesco Donzello