Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-07-2007 00:22:17

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

[ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonsoir à tous !

Bon ce coup ci, je ne sais vraiment pas comment faire smile

Je souhaites utiliser un fichier de traduction par controller, mais pour cela, il faut que je puisse récupérer le nom du controller avant le $front->dispatch()

Malheureusement quand je fais un

Code:

$front->getRequest()->getControllerName()

il me pète une erreur ... normal vu que l'objet request n'est pas encore défini.

Quelqu'un aurai une idée de comment récup le nom du controller qui va être exécuté avant le dispatch ?

Merci !

Lex

Hors ligne

 

#2 18-07-2007 07:40:13

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

As tu essayer un plugins et le preDispatch() ?

Code:

class traduc extends Zend_Controller_Plugin_Abstract {
    public function preDispatch($request) {
        $request->getControllerName()
    }
}

Hors ligne

 

#3 18-07-2007 08:46:47

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonjour Lex,

Et pour enregistrer le plugin de TiTerm, tu ajoutes dans ton index.php

Code:

$controller->registerPlugin(new traduc());

Si tu veux que ton actionController soit déjà instancié, il faudra passer par un Helper et pas un Plugin.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 18-07-2007 09:04:00

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

philippe, a quel endroit utiliserais tu l'action helper avant le dispatch ?
Dans le preDispatch de l'action ?

Hors ligne

 

#5 18-07-2007 09:14:31

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

J'aurais tendance à mettre le code dans le preDispatch du helper. Comme ça je pourrais ajouter le translateur directement dans l'action controller (comment ça c'est pas clair ?). Voilà l'exemple :

Code:

class Kitpages_Translation_Helper extends Zend_Controller_Action_Helper_Abstract {
    public function preDispatch() {
        $controlleurName = $this->getRequest()->getControllerName();
        $translator = new MyTranslator($controllerName);
        $this->getActionController()->translator = $translator;
    }
}

et dans le index.php

Code:

Zend_Controller_Action_HelperBroker::addHelper(new Kitpages_Translation_Helper());

Et après dans ton action, tu peux utiliser directement $this->translator

Quand j'aurais fini mes 2 projets en cours, je ferais un tuto sur les plugins et les helpers... C'est assez mal expliqué dans la doc, mais c'est magique c'est deux trucs... (compter fin aout smile )

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 18-07-2007 09:21:40

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Ah oui, tout bete, j'avais loupé le preDispatch des helpers...

Hors ligne

 

#7 18-07-2007 09:52:27

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Je me suis mis il n'y a pas très longtemps au Zend_Framework, donc je ne connaissais que de loin tout ce dont vous me parlez.

Je vais regarder cela ce soir quand je serai de retour chez moi!

En tout cas merci pour vos conseils et vos remarques smile

Je vous tiens au courant smile

Hors ligne

 

#8 24-07-2007 23:01:41

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonsoir tout le monde,

J'ai enfin un peu de temps pour m'occuper de cela smile

J'ai donc suivi les conseils de Philippe et j'ai l'impréssion qu'il n'aime toujours pas

J'ai le droit à un  jolie

Fatal error: Call to a member function getRequest() on a non-object in /home/www/private/XXX/dev/www/library/Zend/Controller/Action/Helper/Abstract.php on line 117

J'ai mis le addHelper au niveau du constructeur de ma classe étendant Zend_Controller_Action

Code:

abstract class XXX_Controller extends Zend_Controller_Action {
    
    public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
    {
        parent::__construct($request, $response, $invokeArgs);
        Zend_Controller_Action_HelperBroker::addHelper(new XXX_Translation_Helper());

Je cherche ou est ce que j'ai pu me tromper, et je reviens vers vous !

Lex

Dernière modification par Lex (24-07-2007 23:01:54)

Hors ligne

 

#9 24-07-2007 23:47:45

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Je viens de tester avec les plugins, et ca à l'air de vouloir fonctionner ....

Je comprend pas ce que j'ai pu faire de pas bien avec les helper ...

Hors ligne

 

#10 25-07-2007 06:57:25

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bah c'est tout bete, tu ajoutes ton helpers dans le contructeur de ton controller qui n'est pas encore instancié.
Le add helper doit se faire dans le bootstrap (ton index.php)

Hors ligne

 

#11 25-07-2007 09:38:32

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

TiTerm a écrit:

Bah c'est tout bete, tu ajoutes ton helpers dans le contructeur de ton controller qui n'est pas encore instancié.
Le add helper doit se faire dans le bootstrap (ton index.php)

En faites j'ai un peu tout testé hier soir, et lorsque je mets mon addHelper dans mon index.php avant (ou après) l'instanciation de mon Zend_Controller_Front, ca revient au même ....

Je retesterai plus en profondeur ce soir, histoire de voir.

Dernière modification par Lex (25-07-2007 09:40:07)

Hors ligne

 

#12 25-07-2007 09:43:31

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonjour Lex,

Tu peux nous envoyer le code de ton helper ? J'ai l'impression qu'il y a un truc bizarre dans ton preDispatch (du genre un appel à getRequest() sur un objet qui n'existe pas).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#13 25-07-2007 09:49:31

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

philippe a écrit:

Bonjour Lex,

Tu peux nous envoyer le code de ton helper ? J'ai l'impression qu'il y a un truc bizarre dans ton preDispatch (du genre un appel à getRequest() sur un objet qui n'existe pas).

A+, Philippe

Bonjour Philippe ^^

Mon Helper ressemble grosso modo à celui que tu m'avais mis en exemple.

Je posterai tout le code utile ce soir.

J'ai trouvé une autre solution pour faire ce que je veux faire avec mon objet "Translation", mais pas très propre ^^ smile

Dernière modification par Lex (25-07-2007 09:49:57)

Hors ligne

 

#14 25-07-2007 19:47:18

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonsoir à tous !

Et bien finalement ca marche !
Je vois pas ce que j'ai fais de moins qu'hier, mais j'ai tout repris de zéro et ca fonctionne.

Pour info:

Code:

Zend_Loader::loadClass('Zend_Controller_Action_Helper_Abstract');
Zend_Loader::loadClass('XXX_Translation_Core');

class XXX_Translation_Helper extends Zend_Controller_Action_Helper_Abstract  {
    public function preDispatch() {
        $controlleurName = $this->getRequest()->getControllerName();
        $translator = new XXX_Translation_Core($controlleurName);
        $this->getActionController()->translator = $translator;
    }
}

Code:

class XXX_Translation_Core extends Zend_Translate {
    public function __construct($controller_name) {
        echo $controller_name;
    }    
}

et dans le bootstrap

Code:

Zend_Loader::loadClass('XXX_Translation_Helper');
Zend_Controller_Action_HelperBroker::addHelper(new XXX_Translation_Helper());
$front = Zend_Controller_Front::getInstance();

Merci à tous pour votre aide précieuse!

Lex

Hors ligne

 

#15 25-07-2007 21:21:28

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Encore un petit soucis, mais qui n'a rien à voir...

J'ai une erreur

Code:

Fatal error: Exception thrown without a stack frame in Unknown on line 0

Dès que je fais

Code:

parent::__construct(Zend_Translate::AN_GETTEXT, array());

dans mon objet qui étend Zend_Translate

Une idée ? Je sèche la ^^

Dernière modification par Lex (25-07-2007 21:22:10)

Hors ligne

 

#16 26-07-2007 08:36:00

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Bonjour,

Ton 2e paramètre est faux, il faut mettre le nom du fichier de translation (le .mo si tu utilises gettext).
cf : http://framework.zend.com/manual/en/zen … ce.gettext

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#17 26-07-2007 09:42:48

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

philippe a écrit:

Bonjour,

Ton 2e paramètre est faux, il faut mettre le nom du fichier de translation (le .mo si tu utilises gettext).
cf : http://framework.zend.com/manual/en/zen … ce.gettext

A+, Philippe

Bonjour !

J'ai vu une mauvaise doc alors smile Faut que je prenne l'habitude d'aller sur la doc officielle ^^

Merci !

Lex

Hors ligne

 

#18 27-07-2007 11:28:36

Lex
Membre
Date d'inscription: 17-07-2007
Messages: 15

Re: [ZF 1.0] Besoin de mon ControllerName avant le dispatch

Je me suis plus renseigner au niveau de l'erreur

Code:

Fatal error: Exception thrown without a stack frame in Unknown on line 0

La plupart du temps elle est levée quand une exception est levée et qu'il ne peux pas l'afficher (pour une raison X ou Y)

hier soir je l'ai eu car il ne trouvait pas mon fichier "mo"

Quand c'est comme ca je conseille de faire un test et de ne pas lever d'exception mais d'utiliser trigger_error('blah blah', E_USER_WARNING)

Lex

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