je ne connais pas le fonctionnement de Codeigniter mais j'ai adopté cette démarche avec Zend_Framework.
la première chose je n'ai qu'une seule page HTML car mon but est d'avoir une appli et non un site
(on ne définit pas une url pour chaque action que l'on fais dans notepad++)
l'appli démarre donc comme n'importe quelle appli Zend MVC
l'url invoqué démarre le front controller qui trouve le ou les controllers adéquat charges les modèles et retourne une page construite par une vue.
ici comment la première étape de l'intégration Zend_Extjs la vue est un banale page html qui contient
les reférence au divers css
import de ext-all.js l'import du fichier locale en fonction de la langue de l'utilisateur.
un block perso.
globalInfos=<?php echo(json_encode($globalInfos); ?>;
cette petit ligne magique va définir une variable globale dans javascript appelée globalInfos
c'est un objet js qui contient diverses entrée comme le nom de l'utilisateur sa langue et quelques infos que le serveur possède et dont peut avoir besoin extjs. c'est très libre.
en suite vient une référence au fichier js de l'application app.js.
et pour finir un corps vide.
(pour les très grosses applis je mets une image splashscreen pour faire patienter qui sera enlevée par app.js lorsque le code js démarre.)
lorsque l'apli a démarée j'ai l'IHM qui est en place côté ExtJs j'utilise MVC aussi et mes différent modules via ajax invoque le serveur pour obtenir des données en json.
pour chaque url (ajax) j'ai une action dans un controller Zend je me base donc là encore sur la structure MVC de Zend.
pour la mise au point je traite ces controlleurs comme si je n'avais pas ExtJS je pas donc pas le mécanisme de model et ma vue est un simple
<pre><?php print_r($response);?></pre>
du coup je peux invoquer mon url via le navigateur et faire la mise au point tranquillement.
Lors le cycle MVC pour cette url ets OK je supprime la vue et j'indique à mon controleur ne plus produire de vue mais de retourner avec les entête adéquat
echo utf8_encode(json_encode($response));
C'est fait les deux sont branchés.
Les avantage avec cette approche sont les suivants
- séparation de la partie javascript de la partie php (aucun code java n'est généré en php)
- utilisation au mieux des capacité MVC de Zend
- utilisation au mieux des capacité MVC de ExtJS
- Possibilité de travailler en deux équipes
- définition claire du contrat de service entre le client ExtJS et le serveur Zend
- des perfs très bonnes (utilisations optimale des caches réseau et serveur.
- possibilité de définir des bouchons json pour le client.
- [possibilité de changer de techno côté serveur (une appli est passé de Zend à tomcat sans modifier une ligne de javascript)
- Utilisation de Zend en conservant la philosophie du framework
- utilisation de ExtJS en conservant la philosophie du framework
- Présentation de prototypes d'interface interactive sans avoir besoin d'un serveur (un index.hml remplaçant la page généré par le serveur.
- Pas une seul concaténation de chaine pour obtenir un bout de code HTML ou js ou css
- Aucun problème de mélange de " et autre ' et \' ou \" une chaine js reste dans js et une chaine php dans php.
A ce jour la plus grosse appli développé de la sorte fait environ 26 000 lignes de JS et 30 000 lignes de php.
les seules fois ou elle s'est montrée lente fut lorsqu'un "dirigeant" a exigé que dans un arbre certain utilisateur ait tous les objets de la base. (alors qu'un filtre modifiable par l'utilisateur obligeait d'en avoir qu'une partie) Il fut impossible de lui faire admettre que ça ne pourrait jamais fonctionner. lorsque php à déversé via json les millions de lignes dans l'arbre IE6 à généré un coredump si j'ose dire, firefox semblait tourner sur un 8086 à 0.5MHz. par test on c'est amusé à attendre que FF rende la main et au bout de plus d'une heure lorsque cela était. nous avons remis un filtre et il repartit vaillamment au bout d'une heure environ. il est ensuite redevenu réactif. en fait chargé tant d'objet avait saturé la mémoire mais il a résisté.
le "dirigeant" exigeant a baissé sa garde et à fait comme tout le monde choisit un filtre pour ne voir que quelque centaine d'entre dans l'arbre.
A+JYT
Partager