user1375998
user1375998

Reputation: 31

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

Upvotes: 3

Views: 2929

Answers (3)

a.l.e
a.l.e

Reputation: 868

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.

Upvotes: 2

Francesco Donzello
Francesco Donzello

Reputation: 773

You can solve this way:

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

You were close to the solution.

Upvotes: 1

user1375998
user1375998

Reputation: 31

I did not want to render the form by myself, but as I was already doing that due to an unrelated issue, I developed some kind of fix:

[edit.html.twig]
   <div class="entry {% if not entity.dueDate %}nullabledate{% endif %}">
     {{ form_label(form.dueDate) }}
     {{ form_errors(form.dueDate) }}
     {{ form_widget(form.dueDate) }}
</div>

[add to some javascript file]

jQuery(document).ready(function() {
  var nullDate = function(id) {
    $(".nullabledate select").each(function(key,elem){
      $(elem).val('');
    })
  }
  nullDate();
}

Upvotes: 0

Related Questions