Bonjour,

J'ai un modèle qui possède 2 champs datetime (starttime et endtime). Il me faut sur ces champs les heures et minutes pour mon appli. J'ai utilisé le tuto de graf pour la config du datetimepicker de jquery-ui et tout semble ok sur le comportement du formulaire.
Lors de l'enregistrement, la methode Save ne renvoie pas d'erreur et insert bien le nouvel enregistrement mais aucune date n'est insérée dans la base mysql (champ NULL) !!

Pour comprendre et a de fin de debug, j'ai essayé de laisser cakephp3 gérer lui meme le form pour le 1er champ starttime (donc sans le datetimepicker) et j'ai laissé le datetimepicker sur le 2eme champ endtime.

echo $this->Form->input('starttime');
echo $this->Form->input('endtime', ['label' => 'Date et heure résolution', 'type' => 'text', 'class' => 'dtpkr']);

Le debug du tableau $_POST donne ceci :

' description' => 'mon texte',
'starttime' => [ 
   'year' => '2015',
   'month' => '11',
   'day' => '14',
   'hour' => '21',
   'minute' => '55'
],
'endtime' => '2015-11-14 22:59'

Le format n'est vraiement pas identique.
Comment faire pour résoudre ce disfonctionnement ?

Quelqu'un a-t-il rencontré ce genre de problème ?
Merci

5 réponses


Remplace les '-' par des '/', pour moi cela fonctionne

Froggyp
Auteur

Le changement de - en / n'a pas eu d'effet sur le probleme.
C'est vraiement au moment du patchEntity() que le comportement change.

$intervention = $this->Interventions->patchEntity($intervention, $this->request->data);

Si j'effectue un debug avant et après le PatchEntity les dates sont zappées et positionnées a NULL !!

Debug du $this->request->data :

 /src/Controller/InterventionsController.php (line 106)
[
    'dim_id' => '2',
    'type_intervention_id' => '1',
    'user_id' => '1',
    'description' => 'test',
    'starttime' => '2015/11/13 20:00',
    'endtime' => '2015/11/14 12:10'
]

Debug de $intervention :


/src/Controller/InterventionsController.php (line 107)
object(App\Model\Entity\Intervention) {

    'id' => (int) 3,
    'dim_id' => (int) 2,
    'type_intervention_id' => (int) 1,
    'user_id' => (int) 1,
    'description' => 'test',
    'starttime' => null,
    'endtime' => null
    ...
Froggyp
Auteur

Petite precision, si je force les choses (pour debug) avec les valeurs postées pour les 2 dates sur l'entité patchée alors ca fonctionne bien au niveau de l'insertion en base de données.

$intervention->starttime = date('Y-m-d H:i:s', strtotime($this->request->data['starttime']));
$intervention->endtime = date('Y-m-d H:i:s', strtotime($this->request->data['endtime']));

Mais cela ne me permet pas de compremdre ce qui se passe pour faire les choses plus proprement

est Ce que le MarshallEt fonctionne correctement Lorsque tu utilises un input de type text pour ton champ date (sans datepicker) ?

Froggyp
Auteur

C'est effectivement la piste que j'ai decouvert également hier. Je n'avais pas connaissance de ce point qui est mentionné dans le chapitre 22. Internationalisation & Localisation de la doc de cakephp.

il est marqué :
Quand vous créez des inputs de texte qui manipulent des dates, vous voudrez probablement accepter et parser des chaînes datetime localisées. Consultez Parser les Données Datetime Localisées.

Je vais faire des tests et reviendrai poster la reponse !
Merci antograssiot.