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

Zend Framework PHP Discussion :

Zend_Config + Zend_Registry + visibilité (scope)


Sujet :

Zend Framework PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Zend_Config + Zend_Registry + visibilité (scope)
    Bonjour à tous,

    j'utilise le Zend_Config_Ini pour lire un fichier de type .ini pour stocker mes configurations de site dans ma variable ou objet $config. Tout simplement WoW! On peut faire hériter les configurations de prod vs dev, etc....

    En second lieu, pour avoir accès à ma variable $config partout, on dit d'utiliser le Zend_Registry qui est en réalité un singleton! Je fais de même avec $db qui contient en réalité l'espèce de handler que je voudrait utiliser partout. Voici le plus important de mon fichier index.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $config = new Zend_Config_Ini(dirname(__FILE__).'/../application/config/config.ini', 'staging');
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
    ...
    $db = Zend_Db::factory($config->db->adapter,  $config->db->config->toArray());
    Zend_Db_Table::setDefaultAdapter($db);
    $registry->set('db', $db);
    Ainsi, peu importe où le code sera, je pourrai avoir théoriquement accès à ces variables.... Ce que je trouve un peu irritant est d'accéder à ces deux variables ou objets dans mes controlleurs car je dois continuellement faire un Zend_Registry::get('config') et Zend_Registry::get('db')....

    Devrais-je les stocker dans une variable privée de chaque classe controlleur lors de l'init() de celles-ci?

    Ca arrange pas mon problème, car je veux tout autant que mes views scripts puissent accéder à une portion de ma $config. Par exemple, je veux que le $config->template->baseurl ou $config->global->sitename soient incluent dans mes scripts de vues......

    Cela devient un peu «error prone» de faire dans toutes les actions de tous mes controlleurs le genre de chose suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
       public function indexAction()
        {
        	$config = Zend_Registry::get('config');
     
        	$this->view->siteName	= $config->global->siteName;
    	$this->view->pageName	= "Users administration";
     
    ...
     
     
    	public function searchAction()
    	{
    		$config = Zend_Registry::get('config');
     
    		$this->view->siteName	= $config->global->siteName;
    		$this->view->pageName	= "Search users";
     
    	public function listAction()
    	{	
    		$config = Zend_Registry::get('config');
     
    		$this->view->siteName	= $config->global->siteName;
    		$this->view->pageName = "List users";
     
    ....

    Il est évident que déclarer $config en global et hors de tout doute une mauvaise pratique, et vous me direz peut-etre que c'est ce que je semble chercher à faire!

    Que dois-je faire? Meilleure pratique? Ce que je pense faire est d'initialiser le $config dans le init(), ce qui est commun à tout le controlleur, de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	function init()
    	{
        	    $config = Zend_Registry::get('config');
        	    $this->view->siteName	= $config->global->siteName;
    	}
    et déléguer $this->view->pagename dans chaque action...... encore la il faut le faire pour chaque controlleur... :S:S

    ais-je ratté completement le principe? Je cherche la perfection peut etre trop.... mais je veux bien démarer le projet... c'est tout


    Merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par zonzon Voir le message
    Que dois-je faire? Meilleure pratique? Ce que je pense faire est d'initialiser le $config dans le init(), ce qui est commun à tout le controlleur, de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	function init()
    	{
        	    $config = Zend_Registry::get('config');
        	    $this->view->siteName	= $config->global->siteName;
    	}
    et déléguer $this->view->pagename dans chaque action......
    oui c'est ce qu'il y a de mieux à faire pour ne pas avoir de code en double

    Citation Envoyé par zonzon Voir le message
    encore la il faut le faire pour chaque controlleur...
    Pour ça je te conseille de créer une classe abstraite qui hérite de Zend_Controller_Action où tu mettra ce "init"
    Et ensuite tes contrôleurs hériteront de cette classe

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Merci poru la réponse! En plein ce que je pensais!
    vive la POO!!!

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Autre solution : développer un action helper qui contient le même init(). Cela permet de ne rien changer au code des controllers (ils héritent tous de Zend_Controller_Action).

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par vg33 Voir le message
    Autre solution : développer un action helper qui contient le même init(). Cela permet de ne rien changer au code des controllers (ils héritent tous de Zend_Controller_Action).
    Bonjour,

    J'ai pas encore saisi tout le concept des helpers. On peut donc, si je comprend bien créer un helper avec une fonction init() qui est automatiquement appellé lorsqu'on appelle un init() d'un certain controller?

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Dans le manuel ZF :
    Action Helpers (like Zend_View_Helpers) may be loaded and called on demand, or they may be instantiated at request time (bootstrap) or action controller creation time (init()).
    Autant dire que si tu instancies ton helper dans le bootstrap (index.php), il va lancer la méthode init() de l'helper, puis le preDispatch(). Tu peux y glisser ton code à réaliser dans chaque controller. Ainsi, tu respectes le principe DRY, et tu n'as pas à dériver Zend_Controller_Action.

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

Discussions similaires

  1. visibilité de ZEND_REGISTRY
    Par manu32320 dans le forum Autres composants
    Réponses: 3
    Dernier message: 07/05/2009, 09h19
  2. Réponses: 6
    Dernier message: 08/09/2004, 12h35
  3. Visibilité d'une variable
    Par nenoeil dans le forum Langage
    Réponses: 3
    Dernier message: 09/07/2004, 14h14
  4. visibilite de mon serveur sur internet
    Par jabaka dans le forum Apache
    Réponses: 9
    Dernier message: 03/05/2004, 14h22
  5. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33

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