Bonjour,
J'utilise ZF 1.11 et je traduis le contenu ainsi que les url avec Zend_Translate. Tous marche parfaitement.
En plus d'afficher les erreurs (puisque je suis dans un environnement de dev), je les redirige également vers un fichier afin de les archiver.
Dans le code de mes pages, aucune erreur ou exception n'est affichée. Par contre à chaque chargement de page, l'exception suivante s'écrit dans mon fichier d'archive des erreurs :
Donc cette erreur m'indique que j'appelle Zend_Registry::get('Zend_Translate') dans mon layout en ligne 9 (c'est vrai) et qu'à ce moment Zend_Registry::get('Zend_Translate') n'est pas référencé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [17-Apr-2012 09:15:29] PHP Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'Zend_Translate'' in /var/www/yappliMarket/library/Zend/Registry.php:147 Stack trace: #0 /var/www/yappliMarket/application/layouts/scripts/layout.phtml(9): Zend_Registry::get('Zend_Translate') #1 /var/www/yappliMarket/library/Zend/View.php(108): include('/var/www/myweb...') #2 /var/www/yappliMarket/library/Zend/View/Abstract.php(888): Zend_View->_run('/var/www/myweb...') #3 /var/www/yappliMarket/library/Zend/Layout.php(796): Zend_View_Abstract->render('layout.phtml') #4 /var/www/yappliMarket/library/Zend/Layout/Controller/Plugin/Layout.php(143): Zend_Layout->render() #5 /var/www/yappliMarket/library/Zend/Controller/Plugin/Broker.php(333): Zend_Layout_Controller_Plugin_Layout->postDispatch(Object(Zend_Controller_Request_Http)) #6 /var/www/yappliMarket/library/Zend/Controller/Front.php(965): Zend_Controller_Plugin_Broker->postDispatch(Object(Zend_Controller_Request_Http)) #7 /var/www/yappliMarket/library/Zend/Application/Bootstra in /var/www/yappliMarket/library/Zend/Controller/Plugin/Broker.php on line 336
Pourtant je référence Zend_Registry::get('Zend_Translate') dans mon fichier Bootstrap et cette partie du code est exécutée avant la ligne 9 du layout (je vérifie ça en faisant des echo aux deux endroits).
Voici mon fichier Bootstrap
Voici également la partie routage de mon application.ini :
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
37
38 class Zend_Controller_MyPlugin extends Zend_Controller_Plugin_Abstract { public function routeStartup(Zend_Controller_Request_Abstract $request) { //Je cherche la langue dans l'url ou j'applique la langue par défaut if(strlen($request->getRequestUri()) < 4) { if(substr($request->getRequestUri(), -1) != "/") $this->_response->setRedirect($request->getRequestUri().'/', 302); else $this->_response->setRedirect('/fr_FR/', 302); $lang = 'fr_FR'; } else $lang = substr($request->getRequestUri(), 1, strpos($request->getRequestUri(), '/', 2)-1); //J'instance mon Zend_Translate Zend_Registry::set('Zend_Locale', new Zend_Locale($lang)); $translate = new Zend_Translate(array( 'adapter' => 'gettext', 'content' => '../application/languages/'.strtolower(substr($lang, 0, 2)).'/lang.mo', 'locale' => strtolower($lang) )); //Je référence mon Zend_Translate Zend_Registry::set('Zend_Translate', $translate); Zend_Controller_Router_Route::setDefaultTranslator($translate); } } class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { } Zend_Controller_Front::getInstance()->registerPlugin(new Zend_Controller_MyPlugin());
C'est comme si une requête était exécutée en parallèle. Mais ce n'est "à priori" pas le cas. Je vérifie sous Chrome le résultat de toutes les requêtes et aucune de revient en erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 resources.router.routes.default.type = "Zend_Controller_Router_Route" resources.router.routes.defaultmodule.abstract = Off resources.router.routes.default.route = ":@lang/:@controller/:@action/" resources.router.routes.default.reqs.lang = "^(fr_FR)$" resources.router.routes.default.defaults.module = "default" resources.router.routes.default.defaults.controller = "index" resources.router.routes.default.defaults.action = "index"
Pensez-vous que ma façon de procéder n'est pas la bonne ? Auriez-vous une piste ? Pourquoi le layout est parfois appelé avant la fonction routeStartup de mon plugin ?
En l'état, le site fonctionne mais lever une exception par page, même si c'est invisible, c'est anormal.
Merci pour votre aide
Partager