Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#26 15-07-2008 11:02:06

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Azema a écrit:

Salut à tous,

Je pense qu'il est plus intéressant de créer plusieurs rôles différents qui permettent d'accéder ou non à des ressources et ensuite distribuer les rôles à chaque utilisateurs du système. Cela me parait moins lourd à gérer.

Cordialement, Azema.

N'est il pas plus intéressant de définir les rôles à la volée plutôt que de tous les définir à l'avance ?

Hors ligne

 

#27 15-07-2008 12:05:01

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [REFLEXION] Construction d'un back-office

N'est il pas plus intéressant de définir les rôles à la volée plutôt que de tous les définir à l'avance ?

Rien ne t'empêche de définir des rôles à la volée en utilisant les Acls, non ? En tout cas, c'est comme ça que je procède, mes rôles, actions et modules sont dans une base de données et je charge à la volée.

Dernière modification par whitespirit (15-07-2008 12:26:03)

Hors ligne

 

#28 15-07-2008 16:09:32

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [REFLEXION] Construction d'un back-office

elkolonel a écrit:

Merci Laurent, alors maintenant peut on aller plus loin. Peux t-on faire ceci :

Code:

library
   Zend
   MaLibrairie
   ...
application
   default
      controllers
      models
      views
   backoffice
      modules
         dashboard
            controllers
            models
            views
         news
            controllers
            models
            views
         newsletters
            controllers
            models
            views
         medias
            controllers
            models
            views
htdocs
   index.php
   /public
       images
       css
etc...

Pensez vous que cela soit possible en adaptant correctement son bootstrap ??

Cordialement,

Ca me semble tout à fait possible. En mode BackOffice on peut signaler au front contrôleur où se trouve les répertoires qui contient les contrôleurs. Voir ici : http://www.z-f.fr/forum/viewtopic.php?id=1500

Personnellement je ne sortirai pas la partie frontOffice. Pour moi le module est un moyen de packaging qui doit faciliter :
  * L’installation et la réutilisation. On fait un glissé déposé dans le répertoire modules, on édite le fichier de conf et le module devrait être opérationnel.
  * Minimiser les dépendances. Le module embarque toutes les fonctionnalités qui lui sont spécifiques.
  * Faciliter les mises à jour et l’évolution du module. Tout est dans le répertoire du module, ce qui évite la fragmentation dans toute l’application.

Hors ligne

 

#29 21-07-2008 20:48:54

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Alors la question suivante va être la façon de stocker les données afin d'être le plus évolutif possible dans l'application.
Comme je l'ai indiqué au départ de ce post, le but est de proposer un back office avec un core comprenant les fonctions essentielles à la gestion même du BO ainsi que les briques indissociables (selon ma vision, hein, pas la peine de partir en troll la dessus ;-)) du core que peuvent être :
- la gestion des utilisateurs
- la gestion de l'authentification
- la gestion de news
- la gestion de newsletters
- la gestions des droits (ACL)
- etc.

Par contre, comment être sur que l'application et notamment son modèle de données pourra évoluer sans aucun problème ?

Avez vous des propositions sur ce point particulier ? Un mode de stockage différent de ce qui se fait traditionnellement ? J'ai commencé à me documenter sur RDF mais le web sémantique, ce n'est pas forcément évident et je ne suis pas sur que cela réponde forcément à ma problématique.

[Edit] alors pour voir comment s'organisent les datas avec RDF, vous pouvez jetter un oeil ici (le graphe en bas de page nommé RDF and the Semantic Graph) : http://www.twine.com/tour/semantic. Cela à l'air intéressant mais sans doute complexe à mettre en place. Merci de vos retours...

[Edit 2] Une bonne source d'information sur le RDF : http://websemantique.org/PagePrincipale

[Edit 3] Peut être le modèle de wordpress avec son système de plugin est il un bon exemple d'évolutivité d'pplication. Qu'en pensez vous ?


Cordialement,

Dernière modification par elkolonel (22-07-2008 10:50:20)

Hors ligne

 

#30 22-07-2008 18:06:39

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Alors j'interviens à nouveau afin de faire appel (encore une fois ;-) ) à votre expérience.
Après présentation de l'architecture du projet aux webmasters et designers qui travaillent avec moi, ils m'ont posé les questions suivantes :

- est il possible d'avoir tout les fichier HTML (ceux qui sont présents dans les vues et layouts) regroupés en un seul et même endroit ?
- est il possible d'avoir un système de thème? autrement dit est il possible d'avoir tous les fichiers phtml dans un seul et même répertoire et rangés par thème (duplication des fichiers pour chaque thème) ?

Merci pour vos retours sur la question,

Cordialement,

Hors ligne

 

#31 23-07-2008 12:55:51

Aurelien
Membre
Date d'inscription: 22-03-2007
Messages: 11

Re: [REFLEXION] Construction d'un back-office

On a également developpé un système de BO avec ZF.
On est parti sur un arbo comme celle la :

library
   Zend
   MaLibrairie
   ...
application
   default
      controllers
      models
      views
   fr
      controllers
      models
      views

      admin (la gesiton globale du BO)

      menu
          controllers
          models
          views
          install
      news
          controllers
          models
          views
          install
      utilisateur
          controllers
          models
          views
          install

www
   index.php
   /public
        /fr
            images
            css
            js

Ainsi, on peut ajouter, ou enlever un module très facilement, et chaque module contient sa partie BO et FO.

Pour les évolutions des modules, effectivement, c'est le problème, s'il y a des gros changements dans la structure de la table, ou même du ZF (1.0 et 1.5 avec les layouts), alors dans le dossier install, je gère les différences entre les verisons, et fait les adaptations sur la structure de la base et sur les fichiers s'il le faut...

Hors ligne

 

#32 23-07-2008 13:12:26

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Merci pour ta réponse Aurélien, ma structure a évolué et s'approche de la tienne. Il me reste à résoudre le souhait de mes webmasters, designers pour que tout soit parfait.

Cordialement,

Hors ligne

 

#33 23-07-2008 14:05:15

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [REFLEXION] Construction d'un back-office

Salut Aurelien,

j'aurai 2 questions sur ta structure si tu veux bien :

  * Qu'est ce que contient le répertoire admin ?
  * Tout tes modules on l'aire de se trouver sous /fr comment ça se passe si je rajoute une langue ?

@+

Hors ligne

 

#34 23-07-2008 14:26:52

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Alors je ne veux pas répondre à la place d'Aurélien (euh... pourtant c'est ce que je fais, mais non je donne juste mon avis ;-), arrête maintenant il y a des gens qui te regarde... ), mais en fait le répertoire admin va contenir tout ce qui va être proprement dit le back-office. Tandis que les autres répertoires, tels que 'menu', 'news' seront la partie front office de l'application. Le côté back-office du module de news sera par exemple gérer par le controlleur situé dans 'application/fr/admin/controllers/NewsController.php avec les actions AddAction, ListAction, EditAction par exemple...

Pour ce qui est de l'organisation multilingue, est il nécessaire de tout dupliquer dans des répertoires de langues. N'est il pas plus simple d'utiliser le mode gettext de zend_translate avec des fichiers po (en liaison avec le logiciel PoEdit : http://www.poedit.net/index.php) ?

PS : désolé pour le petit dédoublement de personnalité plus haut, on fait comme si de rien n'était d'accord ?

Hors ligne

 

#35 23-07-2008 15:21:27

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [REFLEXION] Construction d'un back-office

elkolonel a écrit:

mais en fait le répertoire admin va contenir tout ce qui va être proprement dit le back-office. Tandis que les autres répertoires, tels que 'menu', 'news' seront la partie front office de l'application. Le côté back-office du module de news sera par exemple gérer par le controlleur situé dans 'application/fr/admin/controllers/NewsController.php avec les actions AddAction, ListAction, EditAction par exemple...?

Apparemment ce n'est pas ce qu'a l'aire de dire Aurelien :

Aurelien a écrit:

Ainsi, on peut ajouter, ou enlever un module très facilement, et chaque module contient sa partie BO et FO.

D'où ma question smile

elkolonel a écrit:

Pour ce qui est de l'organisation multilingue, est il nécessaire de tout dupliquer dans des répertoires de langues. N'est il pas plus simple d'utiliser le mode gettext de zend_translate avec des fichiers po (en liaison avec le logiciel PoEdit : http://www.poedit.net/index.php) ?

Effectivement  je pense que la bonne approche et d'utiliser le routeur pour simuler un répertoire de langue
http://www.z-f.fr/forum/viewtopic.php?id=552 et l'utilisation de zend_translate et/ou une vue par langue.

Hors ligne

 

#36 23-07-2008 15:54:05

Aurelien
Membre
Date d'inscription: 22-03-2007
Messages: 11

Re: [REFLEXION] Construction d'un back-office

Dans admin, j'ai mon controller admin, qui me permet de pinter mon application sur http://monapplication/fr/admin.

Dans mon bootstrap, je parse tous les modules, regarde s'ils sont actifs ou pas, et défini dynamiquement les PATH de views, model, et controller.

Pour ce qui est du FR, effectivement, chaque module est duppliqué dans cet exemple, ce qui n'est pas super.

L'idée étant de mettre dans default qu iest au même niveau de fr les modules communs multilingues, et ensuite, dans fr, en, es, etc, les modukes spécifiques à chaque version de langue...

Hors ligne

 

#37 30-07-2008 15:24:39

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

elkolonel a écrit:

Merci pour ta réponse Aurélien, ma structure a évolué et s'approche de la tienne. Il me reste à résoudre le souhait de mes webmasters, designers pour que tout soit parfait.

Cordialement,

Alors mes problèmes liés à mes webmasters et designers sont résolus, j'ai réussi à tout placer (déplacer) dans un seul répertoire grâce aux commandes suivantes :

Code:

$viewRenderer->setViewBasePathSpec('/path_to_application/application/design/basic')
        ->setViewScriptPathSpec(':module/:controller/:action.:suffix')
        ->setViewScriptPathNoControllerSpec(':action.:suffix')
        ->setViewSuffix('html');

C'est vraiment là que l'on s'aperçoit de la souplesse et de la puissance du ZF... ;-)

Maintenant, je me pose la question suivante, sachant qu'un back-office ne fonctionne pas sans un front office, est il possible dans le bootstrap de définir un layout pour le front office et un layout différent pour le bo ?

Un retour d'expérience sur cette question ?

Hors ligne

 

#38 31-07-2008 16:03:50

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [REFLEXION] Construction d'un back-office

Salut,

Je débute sur ZF donc je n'ai pas forcément bcp d'expérience...

Pour la structure de mon appli j'ai suivi les conseils de 2mx (que je remercie au passage). J'utilise donc une structure modulaire.
Chaque module contient ses controllers pour le front et ceux pour l'admin. Comme ça si je veux le réutiliser pour un autre projet j'ai juste le dossier du module à copier-coller.

Pour mon admin j'ai un 2e bootstrap (toujours largement inspiré de 2mx wink ).

Je peux donc définir un 2e layout spécifique à l'admin :

Code:

$optLayout = array(
    'layout'     => 'gabarit_general',
    'layoutPath' => LAYOUTS_DIR . '/admin',
    'contentKey' => 'contenu'
);

Zend_Layout::startMvc($optLayout);

Voici ma structure type :

Code:

article
    admin
        controllers
            IndexController.php
        formulaires
            article.form.php
        views
    config
        config.conf.php
    controllers
        IndexController.php
    formulaires
    models
        Article.php
        Articles.php
    views

J'ai deux models. Un au singuler et un au pluriel.

Le model singuler est une class qui propose des actions sur un article unique (recupererInfos(), majNbLectures(), preparerInfosPourWeb() etc.).
Celle au pluriel me permet de récupérer plusieurs articles, pour un listing par exemple. En général la dans function init du controller j'ai un truc du genre :

Code:

$this -> _model = new Articles();

Pour récupérer plusieurs articles j'utilise un code dans le genre :

Code:

$listeArticles = $this -> _model -> renvoyerArticlesDe($rubriques_id, $page_en_cours, $nb_par_page);

Qui me renvoi un array d'instances de Article();

Pour le CRUD, chaque model etend une class qui étend la Zend_DB_Table

Code:

class Article exends Kaimite_Db_AccesDonnees {}

Cette class contient les actions redondantes :

- enregistrerInfos()
- recupererInfos()
- modifierEnregistrement()
- etc.

J'utilise un système de cache perso. La méthode recupererInfos() test si le cache existe et le récupère ou interroge la base.

Pour l'espace d'admin je me suis fait une class qui liste les enregistrements et mes controllers sont souvent sur le même modele :

Code:

<?php

class Agence_IndexController extends Zend_Controller_Action {
    
    function init() {
        Zend_Loader::loadClass("Article", MODULES_DIR . "/article/models");        
        Zend_Loader::loadClass("Articles", MODULES_DIR . "/article/models");
        $this -> _model = new Articles();
        return ;
    }
    
    function indexAction () {
        return;
    }
    
    function listeAction () {
        $Listing = new Kaimite_ListingAdmin();
        
        // Listing des enregistrements
        return;
    }
    
    function corbeilleAction () {
        $Listing = new Kaimite_ListingAdmin();
        
        // Listing de la corbeille                
        return;
    }
    
    function formAction () {
        $uid             = $this -> _request -> getParam('uid', null);
        $Article = new Article($uid);

        if ( is_numeric($uid) ) {
            $this -> view -> classIconeTitre    = "Maj";
            $this -> view -> titreFormulaire    = "Modification d'un article";
        }
        else {
            $this -> view -> classIconeTitre    = "Ajout";
            $this -> view -> titreFormulaire    = "Ajout d'un article";
        }
        $this -> view -> Formulaire         = $Article -> renvoyerFormulaire(MODULES_DIR . "/article/admin/formulaires/article.form.php");
        return;
    }
    
    function enregistrerAction () {
        $Article = new Article();
        
        if ( ( $retourForm = $Article -> infosValidesPourAdmin(MODULES_DIR . "/article/admin/formulaires/article.form.php") ) === true ) {
            $this -> _helper -> viewRenderer -> setNoRender();
            if ( ($uidRetour = $Article -> enregistrerInfos()) !== false ) {
                header("Location:/admin/article/index/liste/uid/" . $uidRetour . "/retour/enregistrer_succes");
            }
            else {
                header("Location:/admin/article/index/liste/uid/" . $uidRetour . "/retour/erreur");
            }
        }
        
        //--> LE FORMULAIRE EST MAL RENSEIGNÉ
        else {
            $Article = new Article($_POST['uid']);
            
            if ( is_numeric($_POST['uid']) ) {
                $this -> view -> classIconeTitre    = "Maj";
                $this -> view -> titreFormulaire    = "Modification d'un article";
            }
            else {
                $this -> view -> classIconeTitre    = "Ajout";
                $this -> view -> titreFormulaire    = "Ajout d'un article";
            }
            
            $this -> view -> Formulaire         = $retourForm;
            $this -> _helper -> viewRenderer -> render("form");
        }
        return ;
    }
    
    function effacerAction () {
        $uid             = $this -> _request -> getParam('uid', null);        
        $Article         = new Article($uid);
        
        if ( $Article -> effacerEnregistrement() ) {
            header("Location:/admin/article/index/liste/retour/effacer_succes");
        }
        else {
            header("Location:/admin/article/index/liste/retour/erreur");
        }
    }
}

?>

Par habitude je n'efface rien de mes tables. J'utilise un champ "poubelle" que je passe à 1 ou 0.
Je n'utilise donc pas les CASCADE de mySQL.

J'ai développé un petit module qui se charge de me créer une arborescence de base ainsi que les principaux fichiers génériques quand je veux me créer un nouveau module. Je lui donne le nom du module, sa table, les actions frontales et il me crée l'arbo, les fichiers .phtml, les class de bases..

Je suis en train de bosser sur mon premier sur site avec ZF Je suis donc encore en phase de test.

Je ne cherche pas vraiment à pouvoir installer des modules depuis mon admin. Mes client n'en sont pas encore là...

Voilà pour ce qui est de ma petite expérience sur ZF. Merci pour vos commentaires et critiques smile

Cordialement,
Kaimite

Dernière modification par Kaimite (31-07-2008 16:06:33)

Hors ligne

 

#39 04-08-2008 16:39:51

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Aurelien a écrit:

Dans admin, j'ai mon controller admin, qui me permet de pinter mon application sur http://monapplication/fr/admin.

Dans mon bootstrap, je parse tous les modules, regarde s'ils sont actifs ou pas, et défini dynamiquement les PATH de views, model, et controller.

Alors c'est là que cela devient intéressant, peux tu me dire comment tu définis dynamiquement des PATH de views ?
Car je me retrouve de nouveau confronté à un problème (sans doute par méconnaissance de la globalité du ZF...). Pour mes webmasters, designers, j'ai réussi à tout caler dans un seul répertoire 'design' qui se trouve au même niveau que le rep. 'application'. J'ai fait de même pour mes modules. Afin qu'ils soient totalement indépendant, je les ai sorti du répertoire application (comme le propose seikajin : http://zend-framework.developpez.com/se … siers/#LIV).

Toutefois, rappelez vous j'ai défini dans mon bootstrap un endroit personnalisé pour mes vues (afin que mes designers et graphistes puissent travailler avec tous les fichiers regroupés)

Code:

$viewRenderer->setViewBasePathSpec('/path_to_application/application/design/basic')
        ->setViewScriptPathSpec(':module/:controller/:action.:suffix')
        ->setViewScriptPathNoControllerSpec(':action.:suffix')
        ->setViewSuffix('html');

et maintenant comment puis je gérer les vues des modules ? Le but d'un module est de le déposer, de modifier quelque peu sa config et qu'il fonctionne. Cela implique d'avoir les vues qui concernent le module dans un sous répertoire de celui-ci... mais alors fini la centralisation des vues pour mes designers...

Avez vous une idée, car là j'ai l'impression de marcher vers un mur dans mon organisation...

Qu'en pensez vous ?

Hors ligne

 

#40 04-08-2008 17:00:35

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [REFLEXION] Construction d'un back-office

Je pense que dans une organisation comme celle que tu recherche tu dois obligatoirement un jour trancher entre :

1 - avoir des modules complètement autonome ce qui implique une séparation des dossiers de vue pour tes designers.
2 - soit centraliser les vues et perdre la gestion autonome des modules.

bah c'est un peu une réponse sans fond, je crois qu'il faut juste faire un choix... Tout dépend de ce que tu recherche, faciliter la gestion des modules ou faciliter la vie de tes designers wink

Dernière modification par Roulio (04-08-2008 17:01:54)

Hors ligne

 

#41 04-08-2008 17:34:23

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [REFLEXION] Construction d'un back-office

Roulio a écrit:

Je pense que dans une organisation comme celle que tu recherche tu dois obligatoirement un jour trancher entre :

1 - avoir des modules complètement autonome ce qui implique une séparation des dossiers de vue pour tes designers.
2 - soit centraliser les vues et perdre la gestion autonome des modules.

bah c'est un peu une réponse sans fond, je crois qu'il faut juste faire un choix... Tout dépend de ce que tu recherche, faciliter la gestion des modules ou faciliter la vie de tes designers wink

Merci Roulio, je crois que tu viens de me donner la solution.

En fait, il faut considérer le module comme un élément indépendant mais pas forcément refermé sur lui-même. L'ajout d'un module sur l'application peut effectivement consister en l'ajout d'un répertoire module mais peut également mettre en place les fichiers nécessaires au templating dans le répertoire design. Le tout est d'avoir des noms et une arborescence suffisamment bien pensée pour ne pas écraser de fichiers de vue/layout/theme d'autres modules.

Contenu du package du module auth (par exemple) :

Code:

[auth.zip]
   /application
      /design
         /theme
            /scripts
               /auth
                  /login.html
   /auth
      /controllers
      /models
      /sql
      /config

Comme cela, il suffit de le dézipper à la racine et de lancer son installation dans le back-office et le tour est joué.

Je vais tester cela mais je pense en effet qu'il s'agit de la bonne solution...

Merci Roulio. ;-)

Hors ligne

 

#42 17-12-2008 12:59:41

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [REFLEXION] Construction d'un back-office

Je fait remonter ce topic assez ancien, juste pour savoir si c'était possible d'avoir un retour d'expèrience de ton backoffice (M. Elkolonel ou d'autres) sur leur création et surtout sur l'architecture choisie.

Dernière modification par baboune (17-12-2008 14:02:07)

Hors ligne

 

#43 20-01-2009 16:13:16

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [REFLEXION] Construction d'un back-office

Bonjour,

Je suis également intéressé par un retour d'expérience !

Merci

Hors ligne

 

#44 21-01-2009 14:21:55

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [REFLEXION] Construction d'un back-office

la ou j'hésite encore, c’est a l’utilisation de 2 bootstraps. Pour pouvoir bien séparer la partie back et la partie front.

Avantage :
- Chargement de fichier INI différent
- Authentification et ACL séparer
- Déclaration du Layout et des vues bien distinc
- Sécurité

Default :
- Lourdeur de mise en place.

Hors ligne

 

#45 21-01-2009 16:03:17

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [REFLEXION] Construction d'un back-office

Salut,

Ce n'est pas lourd à mettre en place avec une bonne gestion de la config.

Par exemple une classe qui load la config en fonction du module dans le frontController.

De mon côté je ne met rien ou presque dans le bootstrap.

J'ai un plugin d'initialisation commun à toute l'appli, que j'appelle depuis le bootstrap en passant en paramètre le nom du module.

Ensuite dans le plugin d'initialisation j'utilise une classe qui se charge de loader l'environnement et toute la config du module en question, et tout se fait automatiquement.

J'accède ensuite indépendamment, grâce à une classe dérivant Zend_Registry, à ma config (fichier ini lié à l'environnement : dev, test, prod, etc.) et aux paramètres (fichier ini contenant tous les paramètres de l'appli en elle même, donc qui ne changent pas quelque soit l'environnement).

Je pense que séparer les config et paramètres du front et du back est une bonne solution.


A+ benjamin.

Dernière modification par Delprog (21-01-2009 16:03:46)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#46 22-01-2009 13:58:27

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [REFLEXION] Construction d'un back-office

Ensuite dans le plugin d'initialisation j'utilise une classe qui se charge de loader l'environnement et toute la config du module en question, et tout se fait automatiquement.

tu utilise quelle type d'architecture et peut tu me détailler stp ce que tu entend par "loader l'environnement et toute la config du module en question", translate, layout,  vue, ACL c'est ça (juste pour être sur).

Je pense que séparer les config et paramètres du front et du back est une bonne solution.

Oui je suis completement d'accord

Hors ligne

 

#47 22-01-2009 14:22:59

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [REFLEXION] Construction d'un back-office

Salut,

Dans ma classe d'initialisation je commence par appeler une classe Tight_Config en passant en paramètre le chemin du fichier qui décrit l'environnement. C'est à dire celui contenant le nom du fichier ini de config à utiliser (qui change en fonction de l'environnement), et le fichier de paramètres (tout le paramétrage lié à l'application elle-même, routes, vues, controllers, ACL, langues, etc.) à utiliser par l'appli.

Cette classe de config redéfinie le Registre pour utiliser encore une fois un registre personnalisé Tight_Registry, depuis lequel j'accède à toutes les méthodes du Zend_Registry + des méthodes qui me renvoient soit la config, soit les paramètres.

Suite à ça, je continue l'exécution de mon initializer et configure chaque partie indépendamment (un peu comme l'initializer proposé par Zend Studio for Eclipse) automatiquement en fonction du fichier de paramètres.

Code:

$this->initDb();          
$this->initCache();
$this->initLanguage();       
$this->initView();
$this->initHelpers();        
$this->initPlugins();
$this->initRoutes();        
$this->initControllers();

exemple pour la vue :

Code:

    /**
     * Initialise la vue en fonction des parametres définis dans
     * Tight_Registry::getParams()
     * ou avec des valeurs par défaut
     * 
     * @return void
     */
    public function initView()
    {                    
        Zend_Loader::loadClass('Tight_View');                
        $this->_view = new Tight_View();

        // Si des config de scripts sont présentes dans le fichier de paramètres
        $scripts = Tight_Registry::getParams()->get('view')->get('scripts', null);
        if (!is_null($scripts)) {
            foreach($scripts as $script) {
                $this->_view->addScriptPath($this->_moduleRoot . $script->scriptPath);
            }
        }   
        
        // Si aucune config n'a été donné pour les scripts, config par défaut
        $scripts = $this->_view->getScriptPaths();
        if (empty($scripts)) {     
            $this->_view->addScriptPath($this->_moduleRoot . '/views/scripts');
        }        
                
        /**
         * Configure l'url complète de l'accès public dans la variable _httpRoot de la view
         * Accessible ensuite par $this->_httpRoot, voir Tight_View
         * @see Tight_View
         */ 
        $this->_view->setHttpRoot(Tight_Registry::getConfig()->app->get('httpRoot', ''));
        
        $doctype = Tight_Registry::getParams()->get('view')->get('doctype', 'XHTML1_STRICT');
        $this->_view->doctype($doctype);        
        
        $encoding = Tight_Registry::getParams()->get('view')->get('encoding', 'UTF-8');
        $this->_view->setEncoding($encoding);
        
        // Chargement de la config du layout depuis le fichier de paramètres, sinon valeur par défaut
        $layoutPath = Tight_Registry::getParams()->get('view')->get('layoutPath', '/application/views/layouts');
        $defaultLayout = Tight_Registry::getParams()->get('view')->get('defaultLayout', 'layout');
        Zend_Layout::startMvc(array(
            'layoutPath' => $this->_moduleRoot .  $layoutPath,
            'layout'     => $defaultLayout            
        ));
        
        // Recupère l'objet de vue utilisé par les actions des controllers
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        $viewRenderer->initView();
        $viewRenderer->setView($this->_view);
        
        Tight_Registry::set('view', $this->_view);
    }

et dans le fichier de paramètres :

Code:

[view]
scripts.script1.scriptPath = "/views/scripts"

doctype = "XHTML1_STRICT"
encoding = "UTF-8"

layoutPath = "/views/layouts"
defaultLayout = "layout"

Même principe pour le reste.

En gros, je suis parti du plugin d'initialisation proposé par Zend Studio for Eclipse, je l'ai greffé à ma classe gérant la config et automatisé.

Pour la classe Tight_Config, j'ai mis en place un fonctionnement assez proche de ce que propose sekaijin dans son blog, que je remercie au passage car même si nos classes restaient assez différentes, son expérience m'a permis d'améliorer quelques points incertains dans ma classe.

A+ benjamin


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#48 22-01-2009 15:45:20

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [REFLEXION] Construction d'un back-office

merci beaucoup delprog, mais ça confirme quand même ma pensé :
Default : - Lourdeur de mise en place.

je vais surement t'embeter encore, je galère déja avec la méthode _Config, mais c'est plus facile quand même grace a toi et sekaijin. merci encore !

Hors ligne

 

#49 22-01-2009 16:01:39

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [REFLEXION] Construction d'un back-office

merci beaucoup delprog, mais ça confirme quand même ma pensé :
Default : - Lourdeur de mise en place.

Je ne suis pas d'accord smile

Tout ça me permet de créer un squelette d'application une bonne fois pour toute.

Lors d'un nouveau projet, je copie mon squelette, j'en fais un projet et je n'ai plus qu'à ajouter les quelques spécificités s'il y en a.

Quelques soient mes projets, mes bootstrap, initializer et config conservent le même fonctionnement.

Dernière modification par Delprog (22-01-2009 16:02:15)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#50 22-01-2009 16:13:11

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [REFLEXION] Construction d'un back-office

Avez-vous pensé à ne pas faire de "back office" séparé en utilisant judicieusement les ACLs?
Pour le projet sur lequel je bosse, on s'est pas pris la tête. En gros le menu change (s'agrandit) selon ton rôle.
Et vous avez donc accès à d'autres pages "cachés" des visiteurs normaux. Pas de config différentes, et la possibilité de gérer ton site "en directe", je veux dire par là que par exemple quand je suis sur le front et que je visionne une news, j'ai un petit icone pour l'éditer si j'ai les droits...
C'est encore moins lourd à gérer comme ça je trouve :p

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