Cold_Class
Cold_Class

Reputation: 3484

How to set possible date input formats for Typo3 6.2 Extbase Extension?

I made an extension with the Extension Builder in Typo3 6.2 using Fluid 6.2 and Extbase 6.2.
I made Appointment-Objects with a date property.
enter image description here

I want to enter the date in the format "dd.mm.yyyy". So I tried this:
enter image description here

And it gives this error: enter image description here
I'm clueless as I'm not familiar with this and I want to solve this in a nice way.
My createAction code is simply generated by the extension builder and therefore looks like this:

/**
 * action create
 *
 * @param \JH\Appmgmt\Domain\Model\Appointment $newAppointment
 * @return void
 */
public function createAction(\JH\Appmgmt\Domain\Model\Appointment $newAppointment) {
    $this->addFlashMessage('The object was created. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
    $this->appointmentRepository->add($newAppointment);
    $this->redirect('list');
}

Now I realize that if I change something here in order for the format to work I would have to do the same thing in the updateAction and maybe others that I don't know about yet.

I also desperately tried to format it to the desired format somehow in the partial but that was bound to fail - same result:

<f:form.textfield property="appointmentDate"  value="{appointment.appointmentDate->f:format.date(format:'Y-m-d\TH:i:sP')}" /><br />

So that's where I need your help - I don't know where and how to globally allow this date format since I will be needing it for other fields as well.

The only other thing I can think of is changing something in the domain model:

/**
 * appointmentDate
 *
 * @var \DateTime
 */
protected $appointmentDate = NULL;

but I don't know how I should approach this. :( Anyone an idea?

Upvotes: 1

Views: 1541

Answers (1)

rob-ot
rob-ot

Reputation: 1264

You send a date that is not formatted correctly as a date Object. that's exactly what the error says.

What you can do is re-format the date you send so that it arrives at your controller action as a valid argument for your object. this is done with an initialize action that invokes a property mapping.

a clear example can be found here: http://www.kalpatech.in/blog/detail/article/typo3-extbase-datetime-property-converter.html

the part that you need is:

// Here we convert the property mapping using the property mapper
    public function initializeAction() {
        if ($this->arguments->hasArgument('newCalendar')) {
            $this->arguments->getArgument('newCalendar')->getPropertyMappingConfiguration()->forProperty('startdate')->setTypeConverterOption('TYPO3\\CMS\\Extbase\\Property\\TypeConverter\\DateTimeConverter',\TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,'d-m-Y');
        }
    }

You could also disable the validation of the date arguments to your controller and create a valid date Object from your 'date' and then use setAppointmentDate($yourNewDateObject). You then go round the extbase validation, what is not a good practise.

Upvotes: 3

Related Questions