IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Appel à une action via javascript


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Appel à une action via javascript
    Bonjour a tous,

    Travaillant sur symfony depuis 1 mois, je souhaiterais pouvoir appeler une action en passant par une fonction javascript.

    J'ai essayé de suivre sans succès ce tuto qui permet de changer le texte d'un bouton après avoir récupérer sa valeur dans une fonction du type executeMyAction.
    http://lenybernard.blogspot.com/2010...et-jquery.html

    Lorsque je clique sur le bouton, je passe bien dans ma fonction javascript que voici, déclaré dans un fichier a part (web/frontend/js/myjs.js)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     function myAjaxFunction(){
                alert("test");
                var value = "toto";
                jQuery.post("job/updatecvinterest",
                {myParam : value},
                function(data)
                {
                    $("#mybutton").attr("value",data);
                });
            }
    qui est censé appeler la fonction executeUpdatecvinterest du module job que j'ai déclaré dans le fichier frontend/modules/job/actions/actions.class.php.

    Au lieu de passer par cette fonction, le texte du bouton devient le contenu du fichier /frontend/modules/job/templates/indexSuccess.php

    J'ai bien essayé de créer un fichier /frontend/modules/job/templates/updatecvinterestSuccess.php mais ca n'a pas fonctionné non plus.

    Est ce que je dois créer un nouveau module afin de pouvoir accéder à l'index de ce dernier ?

    Est ce que quelqu'un pourrait éclairer ma lanterne s'il vous plait !?

    Merci , a bientot

  2. #2
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Tu peux nous montrer les routes correspondantes de ton routing.yml ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour Herode, merci pour ta réponse.

    Voici le fichier routing.yml

    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
     # default rules
    homepage:
      url:   /:sf_culture
      param: { module: home, action: index }
     
    # generic rules
    # please, remove them by adding more specific rules
    default_index:
      url:   /:sf_culture/:module
      param: { action: index }
     
    default:
      url:   /:sf_culture/:module/:action/*
     
     
    sf_guard_signin:
      url:   /:sf_culture/login
      param: { module: sfGuardAuth, action: signin }
     
    sf_guard_signout:
      url:   logout
      param: { module: sfGuardAuth, action: signout }
     
    sf_guard_password:
      url:   request_password
      param: { module: sfGuardAuth, action: password }
    Je viens de créer la fonction executeIndex de mon module Job (je n'en avais pas encore besoin) et le résultat est correct !
    Le probleme c'est que je ne veux pas faire mes modifs dans cette fonction qui pourrait m'etre utile par la suite......

    Je ne comprends pas trop...

    J'ai fait afficher sur le bouton la valeur de $request->getPathInfo() et j'obtiens : /fr/job .
    L'action semble ignorée ainsi que les éventuels parametres que je ne peux donc pas récupérer....

    Est ce qu'il faut que je rajoute une ligne dans le fichier routing.yml ?

  4. #4
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Je ne vois pas clairement pourquoi la route default_index reconnaitrait l'URL http://monsite.truc/fr/job/monaction. Mais le fait est que j'utilise le moins possible les routes par défaut. Elles figurent en fin de fichier après toutes les routes que je veux reconnaitre et qui sont explicitement décrites. Parfois, je n'ai même pas de routes par défaut.

    Avantages :
    - c'est explicite
    - pas d'ambiguïtés
    - tu peux paramétrer tes routes bien plus finement (par exemple : réserver une route à la méthode POST, contrôler que l'argument id est bien numérique, etc.)

    Donc oui, à ta place, en attendant de comprendre exactement ce qui cloche, je déclarerais une route pour chaque action.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Re Herode,

    N'étant pas tres a l'aise sur les routes, je ne vois pas trop la tete qu'aurait celle associée à updatecvinterest dans mon cas.
    Est ce que je dois également rajouter les paramètres dont j'aurais besoin pour mon action ?

    Quoi qu'il en soit j'ai continué à faire des tests et si je mets le chemin en entier dans le $.post, c'est a dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.post("http://monsite.truc.fr/job/index.php/fr/job/updatecvinterest", ....
    , j'appelle bien l'action executeUpdatecvinterest de mon module job.

    Est ce que tu aurais une explication ? (surtout de pourquoi je dois rajouter /job/index.php avant /fr )

    Merci pour ton attention en tous cas !

    A bientot

Discussions similaires

  1. Appeler une action via controller::action() ?
    Par Khleo dans le forum MVC
    Réponses: 2
    Dernier message: 20/02/2013, 17h38
  2. appel d'une action depuis javascript
    Par riadhhwajdii dans le forum JSF
    Réponses: 4
    Dernier message: 31/07/2009, 13h57
  3. appeler une action par javaScript
    Par khaledirb7 dans le forum Struts 1
    Réponses: 3
    Dernier message: 14/08/2007, 21h57
  4. Appeller une action struts via dojo
    Par micmic31 dans le forum Struts 1
    Réponses: 1
    Dernier message: 09/02/2007, 08h59
  5. Réponses: 4
    Dernier message: 27/04/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo