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

Autres composants PHP Discussion :

Initialiser la classe Bootstrap [ZF 1.9]


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut Initialiser la classe Bootstrap
    Bonjour, je débute avec Zend version 1.9 et j'utilise les configurations classique du "bootstrap" dans index.php comme suit :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php
     
    require_once 'Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
     
    try {
     
       /** Config */
       $config = new Zend_Config_Ini("../application/configs/config.ini", "production");
       Zend_Registry::set("config", $config);
     
       /** Langue */
       //$locale = new Zend_Locale(Zend_Locale::BROWSER);
       $locale = $config->langue;
       $translate = new Zend_Translate("csv", "../langues/fr.csv", "fr");
       $translate->addTranslation("../langues/en.csv", "en");
       $translate->setLocale($locale);
       Zend_Registry::set("translate", $translate);
     
       /** BDD */
       $db = Zend_Db::factory($config->db);
       $db->getConnection();
       Zend_Db_Table::setDefaultAdapter($db);
     
       /** Controller */
       $front = Zend_Controller_Front::getInstance();
       $front->setControllerDirectory("../application/controllers");
     
       Zend_Layout::startMvc($config->layout);
     
       $front->dispatch();
     
    } catch (Zend_Db_Adapter_Exception $e) {
       echo $e->getMessage();
    }
    Maintenant, je veux utiliser une autre méthode : mettre tous ces configs dans la classe Bootstrap; pour cela, en suivant le tutoriel officiel de Zend pour la 2ème fois , j'utilise le script "zf.bat" qui génère des répertoires et des fichiers dont la classe en question.

    Comment insérer dans le Bootstrap.php les paramètres de Zend_translate, les paramètres de configuration, la ressource de la base de données, mes propres formulaires qui se trouve dans "monprojet/application/forms" (il indique une erreur class MachinForm not found in IndexController ...). voilà à quoi ressemble le code jusqu'à présent :

    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
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {	
    	protected function _initAutoload()
    	{
    		$autoloader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'Default',
    			'basePath'  => dirname(__FILE__),
    		));
    		return $autoloader;
    	}
     
    	protected function _initDoctype()
    	{
    		$this->bootstrap('view');
    		$view = $this->getResource('view');
    		$view->doctype('XHTML1_STRICT');
    	}
     
    }
    En lisant la doc officielle, mon impression est . Je ne trouve pas très clair ce framework.

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Il y a deux façons de gérer les ressources avec Zend_Application :
    - utiliser des méthodes "ressource" (les méthodes _init* de la classe bootstrap)
    - utiliser des plugins

    L'intérêt des plugins est leur réutilisabilité et la possibilité de les rendre paramétrable via le fichier de configuration. Un exemple avec ta configuration des traductions (exemple non testé) :

    Il faut déjà modifier le fichier application.ini avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pluginPaths.My_Resource = "My/Resource"
    resources.translate.locale = "fr"
    Le paramètre pluginPaths définit un préfixe pour les plugins de ressource. Dans cet exemple "My_Resource" : les plugins devront donc être des classes de nom My_Resource_Plugin, situées dans un fichier My/Resource/Plugin.php directement accessible depuis l'include_path.

    Le deuxième paramètre permet de définir l'option 'locale' de la ressource 'translate'. Cette ligne indiquera donc au bootstrap de charger le plugin Translate.

    Et maintenant le code du plugin, dans le fichier My_Resource_Translate.php :
    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
    <?php
     
    class My_Resource_Translate extends Zend_Application_Resource_ResourceAbstract
    {
        protected $_translate;
     
        public function init()
        {
            $translate = $this->getTranslate();
            Zend_Registry::set("translate", $translate);
            return $translate;
        }
     
        public function getTranslate()
        {
            if (null === $this->_translate)
            {
                $options = $this->getOptions();
                $translate = new Zend_Translate("csv", "../langues/fr.csv", "fr");
                $translate->addTranslation("../langues/en.csv", "en");
                $translate->setLocale($options['locale']);
            }
            return $this->_translate;
        }
    }
    Oups, en voulant regarder des exemples dans les plugins de ressources déjà définis par défaut, je me suis aperçu qu'il existait déjà un plugin Zend_Application_Resource_Translate

    Vérifies s'il ne répond pas à ton besoin

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    Merci de ta réponse eusebe,

    Finalement, j'ai opté pour ne pas écrire une classe Bootstrap mais garder la page index.php.

    J'ai un peu repris l'idée sauf que j'utilise le plugins Zend_Controller_Plugin_Abstract qui mets tous mes configs comme suit :

    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
     
    class Initialisateur extends Zend_Controller_Plugin_Abstract
    {
    	public function __construct($config)
    	{
    		//echo "init !<br>";
    		/** Langue */
    		//$locale = new Zend_Locale(Zend_Locale::BROWSER);
    		$locale = $config->langue;
    		$translate = new Zend_Translate("csv", "../languages/fr.csv", "fr");
    		$translate->addTranslation("../languages/en.csv", "en");
    		$translate->setLocale($locale);
    		Zend_Registry::set("translate", $translate);
     
    		/** Mise en place de la BDD */
    		$db = Zend_Db::factory($config->db);
    		$db->getConnection();
    		Zend_Db_Table::setDefaultAdapter($db);
    		//Zend_Registry::set("db", $db);
     
    		Zend_Controller_Front::getInstance()->addControllerDirectory("../application/controllers");
    	}
    }
    puis dans l'index.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    /** Controller */
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Initialisateur($config));
    ...
    Je trouve que ça me convient.

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

Discussions similaires

  1. [ZF 1.8] Initialisation modulaire et bootstraping
    Par s.n.a.f.u dans le forum MVC
    Réponses: 12
    Dernier message: 27/07/2009, 12h45
  2. Initialisation de classe Membre
    Par laflak dans le forum Débuter
    Réponses: 8
    Dernier message: 02/11/2008, 17h19
  3. initialisation des classes membres d'une classe
    Par Krishna dans le forum C++
    Réponses: 2
    Dernier message: 09/05/2008, 20h27
  4. Réponses: 3
    Dernier message: 06/01/2007, 14h46
  5. Initialiser tableau class constructeur
    Par dédé dans le forum C++
    Réponses: 3
    Dernier message: 21/11/2006, 13h43

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