Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-04-2008 14:04:27

mbariou
Membre
Lieu: Palaiseau France
Date d'inscription: 09-06-2007
Messages: 40
Site web

Broker et Registry ( ce dernier peu le plus donc il peut le moins)

Bonjour à tous,
J'ai déjà fait un Post sur le sujet sur un fil existant, mais le problème me laisse perplexe, je me permets d'insister. L'usage des Helpers nécessite un enregistrement dans le broker sous forme d'objet. Aussi à part le fait de maitriser le chemin du dépôt et de disposer de quelques méthodes un peu magiques, je ne vois vraiment pas la différence avec Zend_registry. Dans les deux cas il faut créer l'objet pour l'enregistrer, et le broker est peut-être limité aux seuls objets ? Je pense qu'il ya quelque chose qui m'échappe, aussi quelqu'un aurait-il l'amabilité de m'éclairer. Je pensais naïvement que Broker, connaissant la localisation d'un classe nous renvoyait un objet après son instanciation, comme une Fabrique.

Merci pour vos lumières

Marcel

Hors ligne

 

#2 15-04-2008 14:15:00

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Broker et Registry ( ce dernier peu le plus donc il peut le moins)

Une différence majeur est que tu n'as pas besoin d'instancier un objet helper. Je vois plus un helper comme une fonction magique à appeler pour effectuer un traitement (dans zend_view_herlper tu as tous les helpers pour créer des éléments html). En soit, si tu utilises qu'une fonction pour ton objet (ie: le constructeur), c'est sûr que ça reviens au même. Les helpers intégré dans ZF s'utilise facilement pour cette raison.

J'utilise les helpers pour afficher du javascript dans les scripts que j'ai récupéré, par exemple pour afficher un calendrier sur les champs dates. Le helper ajoute automatiquement le javascript nécessaire.

J'utilise le registry pour y placer des objets qui ont réalise plusieurs fonctions. En général j'initialise mon objet dans le bootstrap, après je le met dans le registry. Les classes qui en ont besoin le récupère et effectue un tratiement dessus et je conserve l'état de cet objet. Par exemple, s'il s'agit d'un panier je le met dans le registry et je peux effectuer les opérations d'ajout d'article, modification, nb produits, etc de n'importe ou, d'avoir l'état du caddie à n'importe quel moment (bon, c'était une exemple, j'ai jamais développé de site marchand et je ne sais pas si c'est une bonne idée).

Mais je pense que les spécialistes te donneront des réponses plus completes.

Dernière modification par whitespirit (15-04-2008 14:19:14)

Hors ligne

 

#3 15-04-2008 14:43:31

mbariou
Membre
Lieu: Palaiseau France
Date d'inscription: 09-06-2007
Messages: 40
Site web

Re: Broker et Registry ( ce dernier peu le plus donc il peut le moins)

[Merci WhiteSpirit pour ton echo,

whitespirit a écrit:

Une différence majeur est que tu n'as pas besoin d'instancier un objet helper.

Sur le point cité plus haut, je n'arrive pas à partager ta position, car quoique je fasse, je suis obligé d'enregistrer un objet, donc de l'instancier avant enregistrement,  le broket n'est pas un DP factory, il fonctionne comme le registre. Avec ce dernier il faut faire un Get pour récupérer l'objet dans son dernier état, sinon c'est la même chose... à mes yeux

Mon exemple est le suivant , le fichier helper s'appelant 'leBidule',  dans le bootstrap :

mbariou a écrit:

set_include_path('../library' . PATH_SEPARATOR . get_include_path()); 
require_once 'Zend/Controller/Front.php'; 
require_once '/var/www/html/gesprod/applications/controllers/Helpers/LeBidule.php';
Zend_Controller_Action_HelperBroker::addPath('/var/www/html/gesprod/applications/controllers/Helpers/', '');
$LeBidule=new LeBidule();
Zend_Controller_Action_HelperBroker::addHelper($LeBidule);
Zend_Controller_Front::run('applications/controllers');

Dans le contrôleur :

mbariou a écrit:

require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
    protected $_lebidule = null;   
    public function init()    {
            $this->_bidule = $this->_helper->getHelper('LeBidule');
       
      //  'LeBidule' est-il enregistrer
     if (Zend_Controller_Action_HelperBroker::hasHelper('LeBidule')) {
           $this->_lebidule->addMessage(' LeBidule est là');
    }
       
        $this-> $_lebidule>addMessage('je tente de faire quelque chose');   
        $this-> $_lebidule->addMessage('je fais ceci');   
        $this-> $_lebidule->addMessage('je fais cela');   
        $this-> $_lebidule->addMessage('je vais là');   
        $this-> $_lebidule->addMessage('je vais ici');
        $this->_helper->LeBidule("Je vais direct");       
    }

Voilà ... Comment ça mache pour ma part, la différence me semble homéopathique mais je dois me tromper...

Marcel

Dernière modification par mbariou (15-04-2008 14:44:26)

Hors ligne

 

#4 15-04-2008 16:12:33

mbariou
Membre
Lieu: Palaiseau France
Date d'inscription: 09-06-2007
Messages: 40
Site web

Re: Broker et Registry ( ce dernier peu le plus donc il peut le moins)

Je refais ma réponse, car j'ai déjà fait un post que je ne vois pas.

En conclusion, Broker est bien une Fabrique. Mon erreur provenait du fait que la classe HelperBroker attend obliagtoirement un préfixe et met par défaut "_", donc à défaut d'instanciation je ne voyais jamais ma classe.. Donc pour la circonstance j'ai mis "a" en préfixe dans le nom de la classe qui s'appelle a_LeBidule maintenant.

Dans le BOOTSTRAP Mon exemple devient  :

mbariou a écrit:

set_include_path('../library' . PATH_SEPARATOR . get_include_path()); 
require_once 'Zend/Controller/Front.php'; 
Zend_Controller_Action_HelperBroker::addPath('/var/www/html/gesprod/applications/controllers/Helpers/', ''a);
Zend_Controller_Front::run('applications/controllers');

Dans le contrôleur :

Dans le CONTROLEUR j'utilise la méthode statique :getStaticHelper qui en absence d'objet l'instancie. :

mbariou a écrit:

require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
    protected $_lebidule = null;   
    public function init()    {
                    $this->_lebidule= Zend_Controller_Action_HelperBroker::getStaticHelper('LeBidule);       
      //  'LeBidule' est-il enregistrer
     if (Zend_Controller_Action_HelperBroker::hasHelper('LeBidule')) {
           $this->_lebidule->addMessage(' LeBidule est là');
    }
       
        $this-> $_lebidule>addMessage('je tente de faire quelque chose');   
        $this-> $_lebidule->addMessage('je fais ceci');   
        $this-> $_lebidule->addMessage('je fais cela');   
        $this-> $_lebidule->addMessage('je vais là');   
        $this-> $_lebidule->addMessage('je vais ici');
        $this->_helper->LeBidule("Je vais direct");       
    }

Voilà ...maintenant ça marche comme dans les livres BROKER est une fabrique et merci de m'avoir aidé à réfélchir
Bon courage @+
Marcel

Hors ligne

 

#5 15-04-2008 19:28:21

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Broker et Registry ( ce dernier peu le plus donc il peut le moins)

Oui, c'est ça, tu n'as pas besoin de l'instancier dans ton bootstrap, du coup, comme tu constates, c'est un peu comme une fonction statique. Sinon tu peux acceder à ton helper comme ça :

Code:

Zend_Controller_Action_HelperBroker::getStaticHelper('LeBidule)->addMessage("ton message");

, si tu n'as pas envie d'avoir à trimballer une variable.

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