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

MVC PHP Discussion :

Xajax et Zend Framework


Sujet :

MVC PHP

  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut Xajax et Zend Framework
    Bonjour

    Je voudrais me mettre à l'ajax, et j'ai choisi de passer par la librairie Xajax.
    J'ai trouvé un mini tutoriel qui explique les pièges à éviter et comment intégrer Xajax à ZF. C'est ici : clic

    Ils expliquent donc qu'il faut créer un controller Xajax. Mais ma question est la suivante : si vous avez déjà utilisé Xajax, ou bien si vous aviez à le faire ( ), où placeriez-vous ce controller dans une structure modulaire comme celle-ci par exemple :

    application/
    models/
    modules/
    default/
    controllers/
    views/
    module2/
    controllers/
    views/
    module3/
    controllers/
    views
    ?

    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 183
    Par défaut
    Je raconte peut-être une connerie mais tu ne pourrais pas en faire un model plutôt qu'un controller?

    Ou tu rajoute un module xajax mais je ne sais pas si il peut être appelé facilement par les controller des autres modules.

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne procède pas du tout de cette façon
    je découpe mon application en fonction de sa logique propre et pas du tout en fonction de la technologie utilisée.

    j'ai donc des modules du genre client
    facture ou encore planning etc.

    ces modules ont des contrôleurs qui implémente la logique métier pour divers processus que l'ont peut mener sur ses entités. processus de création d'édition de visualisation, et tout autre propre à l'application (recouvrement, scheduling)

    si dans un processus j'ai besoin d'ajax c'est le contrôleur de ce processus qui le traite et non un autre qui serait dédié à cette technologie ainsi si le processus évolue ou la vue évolue seul ce contrôleur là sera impacté.
    bref pour moi un appel ajax est un appel sur une action d'un contrôleur comme un autre c'est seulement la façon de répondre qui est différente (Rest ou Json)

    A+JYT

  4. #4
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut
    Merci à vous 2.

    Voilà la doc sur le wiki du site officiel de Xajax : ici

    J'ai du mal à l'implémenter dans mon projet... Et je ne vois pas trop comment faire autrement. Je débute en Xajax ET en ajax, alors je ne comprends pas encore tous les rouages...
    J'ai tester quelques fonctionnalités de xajax dans des pages php toutes simples, mais pour ce qui est de l'intégrer avec le ZF, c'est une autre paire de manche.

    Sekaijin, tu n'as donc pas suivi les "conseils" du lien que j'ai mis ? Ca te semble juste illogique ou bien carrément compliqué à mettre en place pour une structure modulaire ?

    Merci

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    oui ça me semble complètement aberrant que de dupliquer toute l'application

    car tu vas avoir tes contrôleur d'action http dans un coin et tes contrôleur de requête httprequest à côté donc tu vas devoir soit faire un seul contrôleur ajax qui contient tout est c'est la mort du modèle MVC
    soit autant de contrôleur AJAX que de controleur d'action

    tout ça me parait complètement fou.

    je travaille sur un projet de taille disons conséquente (90 000 lignes de code)
    je n'imagine pas quelqu'un assurer la maintenance ou la reprise si tout est mélangé ou si tout est en plusieurs exemplaire à droite et à gauche.

    de plus je trouve fou de charger toutes les classes de controleur ajax dès le bootstrap car en fait on ne sais alors même pas si on en a besoin.

    pour ma part c'est le dispatcher qui charge la classe contrôleur en fonction de la demande comme pour une action std c'est simplement dans le traitement de l'action que je m'occupe de savoir si c'est de l'ajax ou de l'http habituel.

    j'ai à un moment été tenté de ne plus transmètre de donnée et quoi que ce soit dans les pages de mon application. donc d'avoir des pages statiques qui invoque des services ajax.

    mais les perfs ne sont pas suffisante. mieux vaut mixer les deux.

    par exemple j'ai un système d'authentification ou l'utilisateur peut avoir plusieurs rôles dans plusieurs groupes de travails.

    lorsque je suis dans l'administration des rôles sur l'action ajouter un rôle
    je prépare le formulaire avec les info de l'utilisateur et la liste des groupes autorisé pour l'utilisateur courant (je n'ai pas de groupe par defaut) et je n'affiche aucun rôle possible dans la liste des rôle.

    une fois le formulaire fournis avec ajax je remplis la liste des rôles en fonction du groupe choisit.

    j'ai un module d'administration qui lui même contient des contrôleurs pour la gestion des Utilisateur, des groupes, et des rôles,

    si j'ajoute un contrôleur ajax je le mets dans mon module ?
    ou j'en mets un commun à toute l'application ?

    comment dans ce cas réutiliser mon module dans toutes les applications ?

    le contrôleur de rôles contrôle toute les opération d'administration de rôle il n'y a pas de raisons suffisant pour aller le mettre ailleurs.

    Je n'ai pas encore envisagé de reproduire ce que j'avais dans un autre framework
    un front controleur d'action comme dans Zend et des classes d'actions
    comme dans zend
    et un front controleur de services qui à les même type de fonctionnalité (en réalité il utilise la même classe de base) et des controleur de services
    de la même façon que dans les actions de zend ce controleur de services vas prendre la requête et la dispatcher sur le bon contrôleur de service.
    l'avantage est que le controleur n'a pas à savoir quel est le type de requête du service si on l'invoque en JSON il réponds JSON si c'est du Rest il reponds RES si c'est du SOAP il réponds SOAP (il peut décider de filter le type mais il ne se préoccupe pas de leur mise en forme pour la réponse pas plus que de la façon de les récupérer.

    dans ce cas avoir un contrôleur de service dans le module qui le concerne n'est pas aberrant. mais il n'est pas évident de gérer des fonction qui sont commune au contrôleur d'action et de service mais qui ne sont pas du ressort du métier.

    A+JYT

  6. #6
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut
    Merci à toi pour cette réponse !!

    J'ai mis en place xajax, ça fonctionne... presque...

    J'ai un petit souci... Lorsque je clique sur mon bouton qui appelle ma fonction, j'obtiens en retour une page tout blanche avec un joli "false".
    J'ai regardé un peu le xajax_core.js, et en fait le "false" correspond à une variable "defaultReturnValue" (j'ai essayé de la modifier en remplaçant sa valeur (false) par la chaine "Hello", et j'obtiens la même page blanche avec cette fois mon joli "Hello"

    Je n'arrive pas à trouver d'où vient le problème...

    Voilà comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    	private function initAjax(){
    		$xajax = new Xajax($this->view->baseUrl."/monController/serviceAjax");
    		$xajax->setCharEncoding('ISO-8859-1');
    		$xajax->registerFunction(array("testAjax",$this,"testAjax"));
    		return $xajax;
    	}
     
    	public function indexAction() {
    		$xajax = $this->initAjax();
    		$this->view->xajaxJavascript = $xajax->getJavascript(ROOT_URL."library/Xajax/");	
                    [....]
    }
    Ces fonctions sont dans un controller. Lorsque mon action "indexAction" est appelée, j'initialise l'objet xajax en appelant la fonction initAjax qui indique quelle fonction lance le processRequest et qui fait les register des fonctions javascript.
    J'indique aussi où se trouve le javascript dans une variable, que j'affiche dans le header de ma vue.

    Dans ma vue, j'appelle ma fonction testAjax en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="javascript:xajax_testAjax();">test</a>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function testAjax() {
    		$objResponse = new xajaxResponse();
    		$objResponse->setCharacterEncoding('ISO-8859-1');
    		$objResponse->assign("testAjax", "innerHTML","Ceci est un test pour voir si xajax fonctionne");
    		return $objResponse;
    	}
     
    	function serviceAjaxAction(){
    		$this->_helper->viewRenderer->setNoRender();
    		$xajax = $this->initAjax();
    		$xajax->processRequest();
    		return;
    	}
    Voilà ma fonction testAjax(), et la fonction serviceAjaxAction qui lance le processRequest.

    Si quelqu'un a une piste pour m'aider, je prends !

    Merci

  7. #7
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    tu as essayé un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xajax->configure('debug', true);

    pour voir l'erreur

  8. #8
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut
    Citation Envoyé par Gats Voir le message
    tu as essayé un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xajax->configure('debug', true);

    pour voir l'erreur
    Voilà ce que cela me dit :

    xajax debug output
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    ERROR: ResponseReceived: NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    SENT [34 bytes]
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    SENDING REQUEST
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    CALLING:
    xjxfun: testAjax
    URI:
    /.../.../.../serviceAjax
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    POST: xjxfun=testAjax
    &xjxr=1201682549203
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    INITIALIZING REQUEST OBJECT
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    PREPARING REQUEST
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    PROCESSING PARAMETERS [0]
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    INITIALIZING REQUEST
    --------------------------------------------------------------
    Wed Jan 30 2008 09:42:29 GMT+0100

    STARTING XAJAX REQUEST

  9. #9
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut
    Bon, en fait je crois que c'était simplement la façon dont j'appelais la fonction qui ne lui plaisait pas...

    Je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:xajax_testAjax();"><img src="<?php echo $this->imgDir ?>mon_bouton.png"/></a>
    Et en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onclick="xajax_testAjax();"><img src="<?php echo $this->imgDir ?>boutons/mon_bouton.png"/></a>
    , ça fonctionne...

    Merci à tous.

  10. #10
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par fadeninev Voir le message
    Bon, en fait je crois que c'était simplement la façon dont j'appelais la fonction qui ne lui plaisait pas...

    Je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:xajax_testAjax();"><img src="<?php echo $this->imgDir ?>mon_bouton.png"/></a>
    Et en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onclick="xajax_testAjax();"><img src="<?php echo $this->imgDir ?>boutons/mon_bouton.png"/></a>
    , ça fonctionne...

    Merci à tous.
    sur ta balise <a si tu ne mets pas l'attribut href le navigateur ne le prends pas pour un lien mais pour une ancre (<a name>) si tu veux qu'il le concidère comme un lien (pour le CSS ou DOM par exemple) il te faut ajouter le href
    dans ce cas li te faut ajouter un return false dans le onClick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="" onclick="xajax_testAjax();retrun false"><img src="<?php echo $this->imgDir ?>boutons/mon_bouton.png"/></a>
    A+JYT

  11. #11
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 110
    Par défaut
    Merci pour cette précision ! Je n'avais pas fais gaffe, effectivement

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Par défaut
    J'ai trouvé une solution propre ici :

    http://mpp.selfip.com/blog/xajax-et-...framework.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Votre avis sur Zend Framework ?
    Par __fabrice dans le forum Zend Framework
    Réponses: 79
    Dernier message: 28/11/2009, 18h09
  2. Zend Framework et URL Rewriting
    Par ToxiZz dans le forum MVC
    Réponses: 1
    Dernier message: 19/04/2006, 11h25
  3. [PHP5] PEAR vs ZEND Framework
    Par wdionysos dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/04/2006, 09h51
  4. Réponses: 3
    Dernier message: 02/04/2006, 19h38

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