Salut à tous,
J'utilise Symfony 1.4.
Côté client, j'utilise dsExtDirectPlugin, le plugin qui permet d'utiliser Ext.Direct (une solution de JSON RPC) dans Symfony. Tout marche très bien de ce coté là.
Voici pour info, le code qui soumet mon formulaire :
J'ai donc un modèle intitulé Event, très classique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var param = { "start" : jQuery("#eventform_start").val(), "end" : jQuery("#eventform_end").val(), "title" : jQuery("#eventform_title").val(), "description" : jQuery("#eventform_description").val() }; RPCTEST.event.directNew( param, function(result, e){ ... });
Coté action, voici comment on récupère les données :
Ce code est parfaitement fonctionnel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public function executeDirectNew() { $form = new EventForm(); $form->disableCSRFProtection(); $tempEvent = array( "start" => $this->getRequestParameter('start'), "end" => $this->getRequestParameter('end'), "eventName" => $this->getRequestParameter('title'), "allDay" => $this->getRequestParameter('isAllday'), "eventDesc" => $this->getRequestParameter('description'), $form->getCSRFFieldName() => $form->getCSRFToken("dc8a160b3caa48277addacfaa2e573f935bcaf76") ); $form->bind( $tempEvent ); if( $form->isValid() ) { $event = $form->save(); $this->result = $event->getPrimaryKey(); } else { $this->result = $form->getGlobalErrors(); } return sfView::SUCCESS; }
Mais :
1/ Impossible de désactiver le jeton de sécurité. Être obliger d'appeler getCSRFToken avec la clé en param est quand même particulièrement moche...
2/ Je trouve ce code un peu naïf. Être obligé de calquer $TempArray sur la structure du tableau $_POST soumis en temps normal, je trouve ça un peu laid. D'autant que je suis obligé de découper les champs date en un sous tableau imbriqué (Mois,année,jour,heure,minutes) à base d'explode que je vous épargne ici...
J'ai essayé :
Je trouve ce code beaucoup plus élégant, mais ça ne marche pas parce que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $event = new Event(); $event->start = $this->getRequestParameter('start'); $event->end = $this->getRequestParameter('end'); $event->eventName = $this->getRequestParameter('title'); $event->allDay = $this->getRequestParameter('isAllday'); $event->eventDesc = $this->getRequestParameter('description'); $form->bind( $event->toArray() );
1/ Si j'ajoute un jeton de sécurité, le code lance une erreur parce que Event n'a pas de colonne CRSF
2/ A l'inverse si je ne l'ajoute, le code lance une erreur de sécurité lié à l'absence de jeton ...
Je sais bien que ce problème est assez spécifique à Ext.Direct. En effet avec de l'ajax traditionnel, les données se retrouvent en post, et tout est réglé.
Néanmoins je me demande si vous avez déjà croisé ce type de problème, où il faut reconstruire manuellement un objet Doctrine, et le binder à un formulaire (pour bénéficier de la validation) ?
Partager