Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-06-2011 12:09:38

r.monceau
Membre
Date d'inscription: 02-11-2009
Messages: 59

Implémentation ZF et ExtJS - Utilisation de deux vues

Bonjour,

Je suis confronté à un petit problème que j'ai résolu d'une manière qui ne me plait pas et j'aimerai avoir vos avis concernant une architecture "propre" permettant l'utilisation conjointe de ma vue HTML et mon script ExtJS.

Les scripts d'Ext-JS doivent être générés au sein de la fonction Ext.onReady(function(){...}.
Cette fonction est appelée au sein de mon Layout puisqu'elle est commune à toutes mes pages.
Mon Layout contient l'appel à ma vue phtml contenant mon PHP / HTML (si besoin) mais également au script Ext-JS intégré entre les balises (et donc pas nécessairement au même endroit que mon code HTML).
Je me retrouve en quelque sorte avec deux vues ce que je ne sais pas implémenter proprement.

J'aimerai, pour commencer, effectuer une architecture fichiers du type :
views -> layouts (contenant tout mon contenu général)
views -> scripts -> controllerName -> view.phtml (contenant ma page HTML)
views -> extjs -> controllerName -> view.phtml (contenant mon javascript)

Mes questions sont les suivantes :
- Que pensez-vous de cette architecture ?
- Comment mettre cela en place ? Je ne sais absolument pas comment faire pour définir deux répertoires contenant chaque partie de ma vue donc je suis preneur de toute piste de recherche ^^

Merci par avance de vos réponses.

PS : N'hésitez pas à m'avertir si je n'ai pas été clair sur certains points.

Hors ligne

 

#2 11-06-2011 12:45:13

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Implémentation ZF et ExtJS - Utilisation de deux vues

je ne comprends pas pourquoi tu veux générer ton javascript en php ?

ça ne sert à rient ExtJS te permet de séparer les couches.


pour ma part

coté Zend le controller d'une page génère une vues PHTML qui ne contient que je strict minimum quasi statique plus un objet JSON contenant des infos sur la page

dans la partite purement statique du site donc Hors php
j'ai des js qui sont organisé eux aussi en MVC comme le propose Extjs

la page généré par le php charge donc Ext + le layaout
chaque partie du layaout est géré par un controleur js (statique) qui charge une vue ext statique et se sert des info fournie dans l'objet JSON de la page pour instancier un modelproxy
ce modele js est chargé par le controleur afin de fournir les donnée à la vue. (principe de base de MVC dans EXT)
pour obtenir les données le proxy appelle une URL php

celle-ci invoque un controlleur php (le même ou un autre) qui va lui aussi suivre sa route MVC classique dans Zend et retourner nom pas une vue HTML mais un JSON

et c'est tout

Url -> ZF_Controler -> ZF_Model -> ZF_View (+ info embarquées)
<----
le navigateur ouvre la vue
Chargement des JS
Instanciation du ext_layaout
chargement des ext_contrôleur
pour chaque contrôleur chargement de ext_view associée
chargement du ext_model associé

le chargement d'un ext_model provoque l'invocation d'une URL
Url -> ZF_Controler -> ZF_Model -> ZF_Json
<---
réception des datas
le modèle place les data dans la vue

C'est rapide (tout le JS étant statique n'est compilé et chargé par le navigateur qu'une seule fois)
Modulaire l'ajout d'éléments dans le layaout ne modifie pas le comportement du controleur ZF ni son modèle ni sa vue.
cela n'implique qu'un nouveau controlleur JS avec son modèle et sa vue (Ext)
puis l'ajout d'action ou de controlleur ZF pour géré cette partie.

le couches sont séparées à tout les niveau.

côté ZF une action ne génère jamais d'élément de navigation de page  lorsqu'elle produit ou traite des données et vice versa lorsque une action traite ou produit des données elle n'a rien à faire côté présentation.


c'est un peut comme si les action qui génère du HTML était des action qui prépare un client spécifique pour un certain travail mais ne le fait pas permet juste de le lancer.

et le client en question est un MVC en EXTJS qui invoque des service ZF qui eux même ne génère jamais que des data

A+JYT

Hors ligne

 

#3 11-06-2011 19:25:08

r.monceau
Membre
Date d'inscription: 02-11-2009
Messages: 59

Re: Implémentation ZF et ExtJS - Utilisation de deux vues

Effectivement, c'est une façon de faire à laquelle je n'avais pas pensé et qui est convaincante.

En revanche, j'utilise la version 3 d'Ext-JS qui ne propose pas d'implémentation du MVC (ou j'ai raté quelque chose d'important). Cette manière de faire me paraît du coup assez compliquée à mettre en place mais je pense m'y essayer quand même.


Sekaijin a écrit:

je ne comprends pas pourquoi tu veux générer ton javascript en php ?

En fait, la majeure partie de mon js reste en js.
L'intérêt d'utiliser l'extension phtml est essentiellement pour les ACL et pour certaines variables de classes (configuration ou autre). Après, pour l'i18n et éventuellement pour certaines grilles extjs "dynamiques".
J'y perd malheureusement en propreté et au niveau du cache.
Il y a clairement des choses que je pourrais effectuer sans inclure le PHP mais je ne suis pas sûr de pouvoir tout enlever.

Dernière modification par r.monceau (11-06-2011 19:25:36)

Hors ligne

 

#4 12-06-2011 11:14:16

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Implémentation ZF et ExtJS - Utilisation de deux vues

Effectivement EXT 3 ne propose pas MVC en natif
mais je m'étais développé les objet et classes ad-hoc.

au début j'avais fait plus simple
comme j'expliquais
la première étape consiste à invoquer un controller ZF on a donc la gestion des ACL et tout le reste.
la réponse de celui-ci étant un phtml il fournis un HTML qui inclus les JS qui vont bien.
il ajoute un tag script qui embarque dans la page les variable nécessaires

j'ai décris ça ici (indépendamment de ZF)

cela permet de sécuriser ce qu'on fournis au client mais aussi d'offrir à js des variable qui vont piloter les script côté client.

pour les grid rien de plus simple
avec ext-3 (avant que je ne passe à MVC) je faisais exactement comme dans les exemples.
dans la page HTML un div avec un id et dans le JS un new grid avec un renderTo sur l'id du div
et une référence au store.

le store lui contient une url d'un contrôleur qui est chargé de fournir les data
on repasse alors pas ZF qui de nouveau sécurise via les ACL et fournis les données auquel à droit l'utilisateur.


pour tester tu prends un exemple statique de ZF
tu mets le HTML dans ton PHTML de ta première action.

puis tu remplace les url vers le fichier JSON par l'url d'un contrôleur et tu écrit ce contrôleur pour qu'il retourne un JSON semblable à celui du fichier.

ensuite tu ajoute un tag js comme dans l'URL que j'ai mis ci dessus
et du coup tu peux par exemple charger un fichier de langue paramètrer l'url du store etc.

l'étape suivant consiste à sortir tout code JS autre que la définition des params du PHTML pour les mettre dans un fichier statique.

pour ce qui est des langue
j'ai des fichier de langues json par vue

Code:

{
  'title': 'Ressutats semestriels',
  'column': [
    { 'name' : 'Produit',
....

du coup lorsque je défini mon grid j'ai toujours la même chose
je charge le fichier de langue en fonction d'une variable dans la page
et ensuite le fais mon new grid
l'objet de conf est statique il se sert simplement pour les texte du fichier de langue.
ainsi rien généré par php juste le tout petit html de départ et les variables.

A+JYT

Hors ligne

 

#5 20-07-2011 16:39:59

r.monceau
Membre
Date d'inscription: 02-11-2009
Messages: 59

Re: Implémentation ZF et ExtJS - Utilisation de deux vues

Je viens juste pour dire un petit merci (je n'avais pas pris le temps de le faire) par rapport à cette réponse qui d'un point de vue architecture me plaît. Je ne sais pas ce qu'il en est au niveau de la montée en charge puisque cela nécessitera plus de connexions au serveur.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages