Bonjour tout le monde
Est ce que quelqu'un peut me dire comment faire pour appeler une action update par exemple en lui envoyant une donnée avec ajax
Je travaille avec symfony2 , et j'utilise une template php
Merci d'avance
Bonjour tout le monde
Est ce que quelqu'un peut me dire comment faire pour appeler une action update par exemple en lui envoyant une donnée avec ajax
Je travaille avec symfony2 , et j'utilise une template php
Merci d'avance
Salut,
Ça se fait de la même manière que sans Symfony.
À la seule différence que tu ne pourras pas utiliser les clé de routing sans les exposer à ton client.
Partant de là deux chemins s'offrent à toi.
Tu peux générer l'URL depuis ton contrôleur et passer l'URL générée à ton template. Ensuite tu fais ton javascript à l'intérieur d'une balise script dans la template qui possède une variable avec ton URL (js inline ... pas forcément top comme manière de faire).
Ou alors tu exposes tes routes de manière à ce que je javascript puisse les utiliser : pour ça, j'utilise le bundle FOSJsRoutingBundle qui fait très bien l'affaire. Il permet d'ajoute une option "expose: true" aux routes que tu souhaites exposer : tu peux alors générer une URL depuis ton JS en utilisant les clé de routine de Symfony.
À toi de voir ce qui te plait le plus.
++
Salut
Je ne comprends pas vraiment la réponse de Nico_f, il n'y a pas de problèmes avec l'exposition des urls, et générer l'url dans le contrôleur est inutile.
Si tu utilises Jquery tu peux faire comme ceci.
Soit mettre ton code JS, au bas de ton template dans une balise script :
Soit le placer dans un fichier .js.twig et faire un include de ce partial 'un peu plus propre'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 {% block javascripts %} {{ parent() }} <script> $.ajax({ type: 'POST', url: '{{ path('ta_super_route', { 'id' : ton_id_récupérer_de_la_manière_qui_te_plait, 'autre_variable' : 'blabla' }) }}', success: function (data) { console.log('super ça marche !! et voici les datas : ' + data); } }); </script> {% endblock %}
N'oublie pas le block javascript et la fonction parent.
Dans les deux cas si tu affiches le code source de ta page, ta route sera réécrite et apparaîtra de la forme 'ta-super-route' car nous utilisons la fonction TWIG 'path'
Tu n'as plus qu'à faire correspondre une action de contrôleur à cette route et une vue. Le résultat de ta vue sera accessible dans la variable data
Si tu récupère ton id en javascript, il faut effectivement passer par un système d'exposition des routes en JS comme Nico l'a indiqué, ou faire ca avec un flag remplacé dynamqiquement par javascript (plus crado)
Code : Sélectionner tout - Visualiser dans une fenêtre à part {{ path('ta_super_route', { 'id' : ton_id_récupérer_de_la_manière_qui_te_plait, 'autre_variable' : 'blabla' }) }}
@damiensan, ta solution est une option aussi, mais personnellement j'évite autant que faire se peut les fichier js.twig, pour de nombreuses raisons : certaines plus valables que d'autre.
- Le js ça n'a rien à faire en dans un fichier HTML, pas plus que le css, donc les block javascripts qui font office de js inline et ou on ajoute un petit morceau vite fait, je suis pas trop fan : le js ça va dans un fichier js.
- Le js, c'est déjà assez pénible comme ça alors si mon IDE/Editeur de texte ne reconnait pas les fichiers *.js.twig et ne me met pas la coloration ça devient encore plus pénible
- Les js.twig ne sont pas compressés par assetic
- En cas de success de ta méthode ajax, admettons que tu veuille afficher un bloc ou un quelconque élément en HTML. Cette partie se fera dans le fichier js.twig alors que l'appel ajax se fera ailleurs. Quand je regarde la déclaration d'une méthode ajax, j'aime bien voir ce qu'elle fait sans devoir avoir à chercher la moitié ailleurs.
- Exposer tes routes explicitement dans la configuration du routing est bien pratique si pour x ou y raison tu as besoin de faire un tour des actions appelées en ajax.
les amis j'ai trouvé des solutions pour une template twig mais moi je me suis familiarisée avec php template du coup je demande une solution pour ce type de template :/
Partager