Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-12-2009 10:55:11

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

[ZF 1.9.6] Zend_Registry::get & Bootstrap

Bonjour,
J'utilise un plugin dans lequel je définie Zend_Registry::set('maclé', 'mavaleur'). Cette clé est accessible partout sauf dans le Bootstrap.php. Comment faire pour récupérer une valeur de mon plugin et la transmettre mon bootstrap ?

Hors ligne

 

#2 28-12-2009 11:25:58

Guillhomme
Membre
Date d'inscription: 09-10-2008
Messages: 102

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

C'est normal que ta variable ne soit pas accessible dans ton bootstrap, car les plugins sont exécutés après le bootstrap.
Si tu mets un petit bout de code, on pourra peut être t'aider wink

Hors ligne

 

#3 28-12-2009 11:32:42

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Merci pour ta réponse.
En fait mon code ce trouve dans ce sujet ici :
http://www.z-f.fr/forum/viewtopic.php?id=4496

J'ai compris que le plugin était lancé après mon bootstrap, par contre je ne sais pas comment m'en dépêtrer du coup.

Hors ligne

 

#4 28-12-2009 12:07:25

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

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Salut,

Pourquoi ne pas initialiser Zend_Translate dans ton plugin ?

Code:

    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $lang = $request->getParam('lang', '');
        $lang = strtolower($lang);
        
        if ($lang !== 'en' && $lang !== 'fr') {
            $request->setParam('lang', 'fr');
            $lang = 'fr';
        }        
        
        $locale = 'fr_FR';
        switch ($lang) {
            case 'en':
                $locale = 'en_US';
                break;
            case 'fr':
                $locale = 'fr_FR';
                break;
        }
        
        // Récupère le Bootstrap
        $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');                
        
        $bootstrap->bootstrap('Locale');
        $localeResource = $bootstrap->getResource('Locale');
        $localeResource->setLocale($locale);
        
        // TODO: charger csv en fonction du module ou autre pour pouvoir éclater les csv et alléger le traitement
        $filePath = str_replace(chr(92), chr(47), APPLICATION_PATH . '/../etc/langs/' . $locale . '/home.csv');        
        $translate = new Zend_Translate('csv', $filePath, $lang);
        Zend_Registry::set('Zend_Translate', $translate);
        
        $view = $bootstrap->getResource('View');
        $view->setTranslator($translate);
    }

Ou tu peux sinon utiliser un plugin de ressource pour ta locale et ton translate, mettre tes paramètres dans le fichier ini, et charger ensuite d'abord ta locale (bootstrap('locale')) et ensuite ton translate.


A+ benjamin.


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

Hors ligne

 

#5 28-12-2009 12:29:49

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Merci Delprog pour ta réponse.
En fait je pensais passer par le boostrap à cause des routes qui y sont définies : le Translate doit être réalisé avant car mes routes sont traduites.
Ton code une fois adapté au mien indique une erreur 'Could not find a translator' pour Zend_Controller_Router_Route. Cette erreur me semble normale puisque mes routes sont définies dans mon bootstrap et que mon translate maintenant est dans un plugin.
Les routes peuvent-elles être définies dans un plugin ?

Hors ligne

 

#6 28-12-2009 19:27:50

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Après pas mal de tests, j'en arrive à la conclusion qu'il est impossible de définir les routes dans un plugin.

Code:

class Plugin_Route extends  Zend_Controller_Plugin_Abstract {

    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        
        Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
        $router = new Zend_Controller_Router_Rewrite();
        $route = new Zend_Controller_Router_Route(
                "/:@language/:@controller/:@action/*",
                array(
                    "language"      =>  Zend_Registry::get('Zend_Locale'),
                    "module"        =>  "frontend",
                    "controller"    =>  "index",
                    "action"        =>  "index"
                ), array('language' => '[a-z]{2}')
            );
        $route->assemble(array('controller'=>birds', 'action'=>'list', 'language'=>'en'));
        $router->addRoute("birds",$route);
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->setRouter($router);
        
    }

}

Ce code fonctionnait lorsqu'il était dans mon bootstrap _initRoutes() et que la fonction d'initialisation _initTranslate() était juste au-dessus.
Lorsque j'ai créé le plugin Translate.php, il manquait le Translator par défaut pour les _initRoutes().
J'ai donc tenté de mettre mes routes dans un plugin Route.php (ci-dessus), et depuis mes routes de la forme /language/controller/action ne fonctionnent plus. Evidemment je n'ai aucun problème pour les routes "d'origine" qui sont de la forme /module/controller/action. Seules mes routes rewrited ne fonctionnent plus.

Etant débutant, j'avoue ne pas comprendre comment sortir de ce problème.

Hors ligne

 

#7 29-12-2009 01:10:39

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Salut,
je pense que la partie de code que tu nous présentes devrait plutôt être écrite dans la méthode routeStartup au lieu de routeShutdown  => Zend_Controller_Plugin
++

Hors ligne

 

#8 29-12-2009 09:40:50

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Salut,
J'ai essayé en routeStartup, mais le résultat est le même.
J'ai tenté mon Translate en routeStartup ensuite avec mon Route en routeShutdown, et même chose.
Mon Translate.php doit obligatoirement s'effectuer avant mon Route.php car mes routes sont traduites et donc le rewrite utilise mon Translate.
Quand ça coince ...

Hors ligne

 

#9 30-12-2009 03:56:30

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Tu peux définir l'index de ton plugin dans la pile du plugins broker.

Hors ligne

 

#10 30-12-2009 11:42:19

Flizer
Membre
Date d'inscription: 17-12-2009
Messages: 34

Re: [ZF 1.9.6] Zend_Registry::get & Bootstrap

Salut 3uclide,
Je défini déjà l'ordre d'execution en faisant l'appel aux plugins dans mon Bootstrap.D'abord Translate, et ensuite Routes. Malheureusement mes routes traduites ne fonctionnent pas lorsque je les définies dans un plugin.
Lorsque tout était dans mon Bootstrap (Translate puis Routes), cela marchait.
C'est la récupération de la langue dans l'url qui m'impose de sortir du bootstrap.
Je pense que ZF ne permet pas d'avoir un site multilingue avec des urls traduites et d'autoriser en même temps un accès direct à une page intérieure traduite.

Dernière modification par Flizer (30-12-2009 11:43:03)

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