Récupérer une entité de Twig depuis JavaScript à envoyer vers le contrôleur ?
Bonjour à vous tous.
J'ai une petit problème à vous exposer, à déjà savoir si ma modélisation est possible.
Voila voila :
En résumé je souhaiterai récupérer une Entité envoyé à un template twig pour l'envoyer vers mon contrôler.
En d'autres termes :
Controller : render->template(monTwig, 'cpt'-> Entity)
monTwig : Modification des valeurs, initialisé par les attributs de l'Entity au préalable. Envoyer l'entity modifié vers mon controller
Controller : persist(Entity)
Voila ce que j'aimerai faire. c'est une approche Objet au complet.
Ce que j'ai cru comprendre pouvoir être possible :
- Créer un formulaire via formBuilder
- Passer en paramètre de ce formulaire une entité
- Instaurer le formulaire dans la vue twig
- Manipulation du formulaire par l'utilisateur
- Soumission
- récupération du formulaire
- Créer une entité vide et la Remplir à travers les données du formulaire
- Persist
D'accord, ce principe peut exister, mais personnellement je ne suis friand de formulaire et préfère être plus maitre de mes balisages. (peut-être ais-je tord, je n'ai d'expertise html/php)
Voila donc où j'en serai :
Controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public function adhesionUnAction()
{
// create an Account
$compte = new CompteAcces();
$compte = $this->getDoctrine()
->getRepository('PldAccountBundle:CompteAcces')
->findOneById(1);
return $this->render('PldAccountBundle:Default:adhesionCompte.html.twig', (array('cpt' => $compte,)));
} |
Mon twig html :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<p class="toCoord">
<label for="iemail"> E-mail : </label>
<input id="iemail" value="{{ cpt.eMail }}"/>
</br>
<label for="icemail"> Confirmer E-mail : </label>
<input id="icemail"/>
</br>
<label for="imdp"> Mot de passe : </label>
<input id="imdp" value="{{ cpt.pwd }}"/>
</br>
<label for="icmdp"> Confirmer Mot de passe : </label>
<input id="icmdp"/>
</p>
<input id="send_un" type="submit" click=/> |
Le javascript
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
$(document).ready(function()
{
$('input#send_un').click(function(){
save({{cpt}});
})
}
);
function save(cpt)
{
alert(cpt.email);
if(cpt != null)
{
$.get(Routing.generate('updateCompte', {'cpt':cpt}));
}
} |
Le controlleur de mise à jour (pour l'instant je fait juste un test echo)
Code:
1 2 3 4 5 6 7 8 9 10
|
/**
* @Route("/adhesion1Update/{cpt}", name="updateCompte", options={"expose"=true})
*/
public function adhesionUnUpdateAction($cpt)
{
$compte = new CompteAcces($cpt);
echo($compte->getEMail());
return new Response($compte->getEMail());
} |
J'aimerai donc pouvoir faire ceci, hors cela ne fonctionne au niveau de mon javascript , {{cpt}}, en effet il ne comprend pas l'objet, attendant un String. De même, j'ai tendance à croire que "cpt" ne correspond à rien, cpt.eMail et cpt.mdp étant interprété de suite en string, je ne suis sur qu'on puisse "stocké" une entité comme ça. si ?
J'ai donc essayer une classe javascript et la fonction associé :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
var maClassA = function(email, mdp)
{
this.email = email;
this.mdp = mdp;
}
$('input#send_un').click(function(){
var objet = new maClassA($('input#iemail').val(), $('input#imdp').val());
save(objet);
}) |
Ici tout marche, normal, l'objet est reconnu et envoyé. hors, bien entendu, coté php (le controller), il ne correspond à rien !
Code:
1 2 3 4 5 6 7 8 9
|
/**
* @Route("/adhesion1Update/{cpt}", name="updateCompte", options={"expose"=true})
*/
public function adhesionUnUpdateAction($cpt)
{
$compte = new CompteAcces($cpt);
echo($compte->getEMail());
} |
Me renvoie "" au lieu de tujrf@lr.com par exemple.
Comment donc faire à comprendre que $cpt correspond à l'objet spécifié dans javascript ? Existe-t-il un binding de classe php-javascript, pour qu'il se reconnaissent ?
C'est à dire, quelque chose du genre
class AJava { nom : string}
Binding[class=Ajava]
class Aphp {nom : string }
ou un autre procédé ?
Vous l'aurez compris, je débute php/javascript à travers symphony
Puis, si j'ai un formulaire de 15 champs, ce serai tellement bien de pouvoir récupérer cet objet "cpt" et simplement le renvoyé, étant renseigné dynamiquement par l'utilisateur ou pas. Dois-je faire 15 fois, objet.paramX = champX.val() ? Il me faut déjà régler la concordance java/php. Si je peut éviter un appel controller du genre
$.get(Routing.generate('updateCompte', {'x1': x1, 'x2': ......... : x15}));
J'espère ne pas avoir été confus, dites le-moi si des points sont obscur. Je suis à l'écoute de d'autres méthode pouvant être meilleur, j'apprends, j'apprends.. :ccool:
Merci