Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-01-2013 20:39:42

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

ZendFramework2+ExtJS4

Bonjour à tous,

Je suis en train de concevoir une application en utilisant le framework de zend côté serveur et ExtJS 4 MVC côté client.
J'utilise la librairie KJSencha : https://github.com/KablauJoustra/KJSencha et je suis parti de l'exemple suivant : https://github.com/KablauJoustra/KJSenchaExample

J'ai créé deux modules ( main & monApplication ), j'ai créé une route "/" qui correspond au module main puis une route "/monApplication" qui correspond au module monApplication (avec deux layouts différents).

Cas d'utilisation :

Un utilisateur lance l'application dans un navigateur et arrive sur le layout principal qui correspond à la base de mon appli côté client app.js. Se viewport comprend plusieurs composants ExtJS dont un formulaire avec deux champs (Identifiant & Mots de passe) que j'appel en me rendant sur ma route /monApplication/login/index
En cliquant sur « Se connecter », je me retrouve au niveau serveur dans mon controller LoginController et dans mon action Authenticate mais à ce niveau je suis bloqué, je n'arrive pas à recuperer mes données provenant du formulaire pour ensuite les traiter et enfin faire une redirection vers un autre layout (nouvelle route).


Quelques questions pour finir :

- Sachant que la notion de module dans zend 2 est de les rendre indépendant, est-il possible de communiquer entre les modules ? Faire transmettre par exemple la session en cours d'un utilisateur d'un module à un autre ?

- Concernant les modules, comment organiser leurs création? par rapport à un besoin fonctionnel ? Faut-il penser / administration (session, login, droits et accès) / fonctionnalités de notre application, / etc.. ?

J'espère avoir été clair dans mon besoin je vous remercie par avance pour votre future implication.

Hors ligne

 

#2 11-01-2013 09:45:30

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ZendFramework2+ExtJS4

Pour ton problème précédent j'ai l'impression que tu ne fais pas du vrai ajax puisque si j'ai bien compris tu récupères la vue que renvoi le ZF2 depuis la partie client c'est bien ça ?
Pour le problème de récupération des données je ne sais pas trop mais il y a des mécanismes de sécurité donc c'est peut être une piste à suivre.

adloiseau a écrit:

- Sachant que la notion de module dans zend 2 est de les rendre indépendant, est-il possible de communiquer entre les modules ? Faire transmettre par exemple la session en cours d'un utilisateur d'un module à un autre ?

La session est indépendante à tes modules, la session va créer un cookie qui est valide par défaut pour le domaine de ton application donc à partir de là il est valide pour tous tes modules.

adloiseau a écrit:

- Concernant les modules, comment organiser leurs création? par rapport à un besoin fonctionnel ? Faut-il penser / administration (session, login, droits et accès) / fonctionnalités de notre application, / etc.. ?

Il faut penser fonctionnalités de l'application, si tu fais un module administration seul par exemple il sera forcément dépendant de chacun des modules qu'il administre donc au final il ne pourra pas être autonome. Dans ce cas il est donc préférable de mettre la partie administration de chaque module dans son module de cette façon si tes modules sont vraiment autonome en désactiver un il ne provoquera pas de plantage.

Hors ligne

 

#3 11-01-2013 11:09:42

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

Tout d'abord je te remercie pour tes réponses.
Pour mon problème, quand je valide mon formulaire ExtJS, je me retrouve au niveau du controller LoginController et l'action authenticateAction, j'arrive à récupérer mes paramètres via :

Code:

$username = $this->getRequest()->getPost('user');
$password = $this->getRequest()->getPost('pass');

Dans cette action je vais traiter les données pour ensuite créer une session.
J'aimerais pouvoir faire à la fin de mon action :

Code:

        if($result->isValid()) {
            // authenticated
            return $this->redirect()->toRoute('main');
        }*/

Mais au lieu de me rediriger vers mon layout, il me renvoi le contenu de celui çi dans ma réponse. (je constate via firebug)

POST
pass 123456
user    dev

REPONSE

Mon layout :
<!DOCTYPE html>
<html lang="en">
    <head>
.....

Ci-dessous le code de mon Login.js

Code:

var loginWindow;
var form;
Ext.onReady(function() {

    loginWindow = new Ext.create('Ext.window.Window',{
        title: 'Login',
        closable: false,
        draggable: false,
        resizable: false,
        width: 370,
        modal: true,
        items: [
            form = new Ext.create('Ext.form.Panel', {
                id: 'LoginForm',
                bodyPadding: 5,
                width: 350, 
                layout: 'anchor',
                defaults: {
                    anchor: '100%'
                },
                defaultType: 'textfield',
                items: [{
                    fieldLabel: 'Username',
                    name: 'user',
                    allowBlank: false
                },{
                    fieldLabel: 'Password',
                    name: 'pass',
                    allowBlank: false
                }],
                //url: 'login/authenticate',
                dockedItems: [{
                    dock: 'bottom',
                    ui: 'footer',
                    xtype: 'toolbar',
                    items: ['->', {
                        formBind: true,
                        text: 'Send',
                        handler: function(){
                            var values = form.getForm().getValues();
                            Ext.Ajax.request({
                               method : 'POST',
                               url: 'login/authenticate',
                               params: values, //Ext.JSON.encode(values),// How to encode multiple name values here?
                               success: function(response) {
                                console.log(response);
                                      //Ext.Msg.alert('Success', response);
                               },
                               failure : function(response) {
                                       Ext.Msg.alert('Failed', response);
                                }
                            });
                        }
                    }]
                }]  
            })
        ]
    }).show();
    // Ext.getBody().mask(); <- modal property does the same
});

Cette "window" est créer quand j'accéde à ma route /login via la vue login/index.phtml (qui correspond à mon action index du controller LoginController :

Code:

<?php echo "view/main/login/index.phtml"; ?>

<html lang="en">
    <head>
        <meta charset="utf-8">
        <?php echo $this->headTitle('Poems - Login') ?>

        <?php echo $this->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1.0') ?>

        <!-- Le styles -->
        <?php echo $this->headLink()
                    ->appendStylesheet($this->basepath() . '/ext/resources/css/ext-all.css')
                    ->appendStylesheet($this->basepath() . '/css/style.css') ?>

        <!-- Scripts -->
        <?php echo $this->headScript()
                    ->prependFile($this->basepath() . '/ext/ext-all-dev.js')
        ?>
    </head>
    <body>
        <?php echo $this->content; ?>
        <?php echo $this->inlineScript()
                ->appendFile($this->basepath() . '/js/app/view/Login.js') ?>
    </body>
</html>

Merci par avance

Dernière modification par adloiseau (11-01-2013 11:12:11)

Hors ligne

 

#4 11-01-2013 14:14:17

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: ZendFramework2+ExtJS4

Je pense que ce que tu décris est normal et n'a pas grand chose à voir avec ZF 2. Je suis pas utilisateur de ExtJS (si tu veux de l'aide spécifique au module ExtJS tu peux venir sur le channel #zftalk et demander ocramius ou rovak, ce sont les deux auteurs de ce module).

Pour ton problème, en fait comme j'ai compris, tu effectues une requête Ajax vers une page qui est traitée par ton contrôleur. Or, comme c'est ExtJS qui prend la main, il empêche le rechargement de la page (c'est le principe des framework MVC en JavaScript). Donc Zend te retourne bien le bon résultat (à savoir un objet Response avec le contenu de la page), mais comme ExtJS empêche la redirection bah... ça redirige pas smile.

Donc ton problème c'est du côté ExtJS. Soit il faut que tu écrives le code ExtJS pour qu'il ne bloque pas la redirection, soit il faut que tu penses ton architecture différente.

En effet, lorsque l'on travaille avec un framework JavaScript, la manière de concevoir sa couche serveur est un peu différente. Comme c'est ExtJS qui va prendre la main côté client, ton ExtJS devrait juste faire des appels Ajax à ton API (par exemple, une API REST, c'est très facile à faire avec Zend Framework 2, et je travaille actuellement sur un module REST qui simplifiera encore davantage).

Ton API retournera du code JSON (ou XML) plutôt qu'une page complète en HTML. En l'occurrence, sur une étape d'authentification, ton serveur pourrait faire la vérification, et retourner un code JSON du style "authentifier"/"not authentified", et c'est côté JS que tu gères quoi faire après avec cette réponse.

De manière générale, dès que tu commences à utiliser un framework JS (ExtJS, Dojo, Ember, Angular...), ta couche serveur devient beaucoup plus light, et ça implique une architecture un peu différente.

Hors ligne

 

#5 11-01-2013 14:19:05

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ZendFramework2+ExtJS4

Voila Bakura m'a devancé mais grosso modo c'est ça et on ne fait pas trop de support JS sinon on s'en sortirait pas smile

Hors ligne

 

#6 11-01-2013 14:39:52

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

Merci pour les réponses claires et précises.
Je vais essayer de contacter ocramius ou rovak à ce sujet, car sur le net je ne trouve pas d'infos sur la façon d'optimiser l'architecture de mon application pour répondre à mon besoin.
Je penssais pouvoir utiliser simplement mes vues côté client et faire par exemple un window.location = 'maRouteZend' au retour du controller côté serveur.. ocramius et rovak sont les deux auteurs de KJSencha ?

Dernière modification par adloiseau (11-01-2013 14:50:23)

Hors ligne

 

#7 11-01-2013 14:53:03

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ZendFramework2+ExtJS4

Bah non le truc c'est qu'en AJAX il faut dissocier la partie serveur de la partie cliente.

La partie serveur (API) te retourne uniquement du JSON, donc en gros des données dans un format spécifique (c'est comme du webservice soap qui va te retourner du XML) et c'est le client (là le javascript) qui va interpréter ces donner et créer la vue qui va bien à l'utilisateur. Donc en gros la partie cliente tout est géré côté utilisateur, ton serveur ne s'en charge pas.

Hors ligne

 

#8 11-01-2013 15:16:49

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

J'ai bien compris le principe, mais pour l'appliquer c'est une autre histoire, je ne sais pas ou je vais pouvoir trouver des informations.. En plus c'est pour un besoin pro avec mon entreprise et le budget alloué à la conception du framework est complétement dépassé :s
En tout cas merci encore d'avoir pris le temps pour répondre à mes questions wink

Hors ligne

 

#9 11-01-2013 15:39:07

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ZendFramework2+ExtJS4

Ouai mais là on est dans un autre domaine. Là tu développe pas un framework mais une application smile.

Ensuite Bakura t'as donné des pistes cherches vers les webservices genre protocole REST

Hors ligne

 

#10 11-01-2013 15:47:54

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

"la conception du framework" c'est vraiment l'intitulé qu'ils ont donné à la fonte de l'appli wink
Oui je vais chercher de se côté, merci wink

Hors ligne

 

#11 11-01-2013 16:13:04

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ZendFramework2+ExtJS4

adloiseau a écrit:

"la conception du framework" c'est vraiment l'intitulé qu'ils ont donné à la fonte de l'appli wink

Et le budget se compte en centaine d'euros :p ?

Dis toi que chez orange par exemple, une application moyenne ça coute plus de 220 jours homme. Sachant qu'un jour homme coute environ 300€ je te laisse faire le calcul ça fait 66k€ et elle n'est pas terminée wink.

Donc c'est pas parce que ta boite dis de la merde qu'il faut le cautionner :p. Parce que un framework c'est un outil de développement qui permet d'améliorer la productivité. Donc il ont peut être confondu avec un CMS.

Hors ligne

 

#12 11-01-2013 16:39:28

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

Je vois de quoi tu parles nous on est a 390 TJM et on a vendu une v3 d'une appli a 500k€ pour utiliser ces nouvelles techno.. L'ancienne appli toirnais sur un framework maison + extJs 2.. Le truc c'est que la personne qui devait s'occuper du socle a demissionné et du coup je dois m'en occupé sans enorment de connaissance du framework zend et extjs mvc ^^

Hors ligne

 

#13 11-01-2013 16:45:13

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

Enfin bref j'ai trouvé quelques sources notamment une appli rest https://github.com/enygma/Agile-ExtJS-ZF mais il utilise zf1.. Je pense que sa va m'aider un minimum.. Il faudrait que je puisse trouver un exemple (une authentification avec une redirection par exemple)

Hors ligne

 

#14 11-01-2013 21:20:44

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: ZendFramework2+ExtJS4

En fiat je pense que ce dont tu as besoin là, c'est davantage de comprendre comment fonctionnent les applications clients. Ton problème se situe davantage sur une méconnaissance du code client (donc JS) que du côté serveur j'ai l'impression.

Comme ça j'ai pas trop trop de référence, mais cherche sur Google du côté "client-side rendering" ainsi que des architectures REST, ce genre de choses là. Mais effectivement, comme l'a dit Orkin, généralement l'application client est distincte de l'application serveur, les deux communiquant via une API.

Sur la plupart des framework JS (en tout cas sur celui que j'utilise, EmberJS, il y a ça), tu peux développer ton application client de manière totalement indépendante en simulant des données venant du servuer, et une fois que tu as développé ta couche serveur, hop tu peux relier les deux.

Hors ligne

 

#15 14-01-2013 08:22:03

adloiseau
Membre
Date d'inscription: 10-01-2013
Messages: 35

Re: ZendFramework2+ExtJS4

tu as surement raison, pourtant je l'utilise en sa version 2 depuis maintenant 2ans.. En développant cette nouvelle application il est clair que je me rend compte qu'il me manque des connaissances à ce niveau..
Je vais davantages me renseigner sur la partie client..
En tout cas si quelqu'un veut apporter ses conseils je suis prenneur!! Vous êtes super réactif merci wink

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