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 :

Exception Zend_Translate mais site fonctionnel [ZF 1.11]


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 108
    Par défaut Exception Zend_Translate mais site fonctionnel
    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 :

    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
    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é.

    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
    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());
    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
    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"
    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.

    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

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 108
    Par défaut
    Bonjour,

    Alors j'ai trouvé la cause :

    Je n'avais pas de fichier favicon (je suis en cours de développement). Donc le navigateur a chaque page appelle favicon, ce qui génère une erreur 404.

    Et dans mon cas, je pense que Zend fait un forward vers une page d'erreur et le forward n'inclut pas la langue dans l'url. Et même si j'ai défini une langue par défaut ça ne marche pas.

    D'ailleurs lorsque j'utilise dans une view, l'url générée est correcte et contient le paramètre de langue même si je ne précise pas la langue en paramètre. Mais si j'utilise depuis une action le paramètre de langue n'est pas repris.
    Il doit y avoir un lien

  3. #3
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonjour,
    Lorsque tu utilise :
    Si tu ne précise pas le paramètre reset à true (je ne sais plus en quelle position il se trouve) l'url prend en compte les paramètre présent dans l'URL.

    Tandis que quand tu utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_helper->redirector(...)
    Il faut que tu précise les variables en 4ème paramètres sous forme de tableau associatif de la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_helper->redirector('action', 'controller', 'module', array('lang' => $this->getRequest->getParam('lang')));
    Sinon tu peux faire un plugin qui réinjecte automatiquement la variable lang

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 108
    Par défaut
    Merci pour cette information.

    Je vais passer mon post à résolu puisque j'ai trouvé l'origine de la panne. Il faut maintenant que je comprenne pourquoi mon plugin n'applique pas la langue par défaut en cas d'erreur 404 sur un fichier. Mais c'est une autre histoire.

    Merci encore.

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

Discussions similaires

  1. Site fonctionnel à rendre accessible en https
    Par Kngel dans le forum Apache
    Réponses: 4
    Dernier message: 04/10/2009, 22h24
  2. [Zend_Translate] et site multilingue
    Par Jonathan.b dans le forum Zend Framework
    Réponses: 18
    Dernier message: 17/04/2008, 09h54
  3. Site fonctionnel sous firefox mais pas sous IE
    Par Olivier Regnier dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/01/2008, 22h12
  4. [USB] Ports détectés mais non fonctionnels
    Par meksoft008 dans le forum Composants
    Réponses: 4
    Dernier message: 21/05/2007, 08h52
  5. [VB 2005] Exception FileNotFound mais l'image s'imprime quand même??
    Par annedeblois dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/06/2006, 16h28

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