Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2007, 11h41   #1
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
Par défaut Existance d'un objet (register,registry)

Bonjour tout le monde, bonne année

Voila mon soucis : j'utilise les fonctions Zend::register et Zend::registry pour stocker et appeler mes objets, mais je ne connais pas la fonction qui permet de savoir si un objet a bien été stocker ou non .
Pouvez-vous m'aider svp?

Merci d'avance et encore meilleurs voeux
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 12h09   #2
Membre actif
 
Inscription : décembre 2002
Messages : 325
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2002
Messages : 325
Points : 187
Points : 187
Bonjour,

pour savoir si un objet a été mis dans le registre avec le nom $nomObjet, tu peux appeler la méthode Zend::isRegistered($nomObjet). Elle retrourne true si un objet a été stocké avec ce nom, false sinon.

Maintenant si tu veux savoir si un objet est stocké mais que tu ne connais pas sous quel nom, tu peux essayer de le stocker à nouveau (register) avec n'importe quel nom, et s'il est déjà dans le registre, tu auras une exception.

Code :
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
39
40
41
42
43
44
45
46
47
/**
     * Registers a shared object.
     *
     * @todo use SplObjectStorage if ZF minimum PHP requirement moves up to at least PHP 5.1.0
     *
     * @param   string      $name The name for the object.
     * @param   object      $obj  The object to register.
     * @throws  Zend_Exception
     * @return  void
     */
    static public function register($name, $obj)
    {
        if (!is_string($name)) {
            throw new Zend_Exception('First argument $name must be a string.');
        }
 
        // don't register the same name twice
        if (array_key_exists($name, self::$_registry)) {
           throw new Zend_Exception("Object named '$name' already registered.  Did you mean to call registry()?");
        }
 
        // only objects may be stored in the registry
        if (!is_object($obj)) {
           throw new Zend_Exception("Only objects may be stored in the registry.");
        }
 
        $e = '';
        // an object can only be stored in the registry once
        foreach (self::$_registry as $dup=>$registeredObject) {
            if ($obj === $registeredObject) {
                $e = "Duplicate object handle already exists in the registry as \"$dup\".";
                break;
            }
        }
 
        /**
         * @todo throwing exceptions inside foreach could cause leaks, use a workaround
         *       like this until a fix is available
         *
         * @link http://bugs.php.net/bug.php?id=34065
         */
        if ($e) {
            throw new Zend_Exception($e);
        }
 
        self::$_registry[$name] = $obj;
    }
N'hésite pas à le dire si je ne suis pas clair, ou bien si je me suis trompé dans mes explications.
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 12h23   #3
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
Merci, j'ai essayé avec cette fonction mais elle ne me renvoie rien (ni true, ni false) .

Code :
echo Zend::isRegistered('demande');
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 12h29   #4
Membre actif
 
Inscription : décembre 2002
Messages : 325
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2002
Messages : 325
Points : 187
Points : 187
Essaye d'executer ce code là où tu veux lire ton objet dans le registre:
Code :
1
2
$reg = Zend::regitry();
vardump($reg); // ou print_r($reg), c'est comme tu le sens
ça va afficher le contenu de tout le registre, tu verras bien quels sont les objets stockés et sous quel nom.

J'ai regardé dans le code de la version 0.2, si tu utilises la version 0.6, le code de cette méthode a peut-être changé.

Tiens nous au courant.
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 12h34   #5
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
En fait je suis toujours a la version 0.2 , mais je pense que l'on va passer à la version 0.6 d'ici peu (on a eu quelques problèmes avec et je viens de voir pourquoi dans le forum ^^). J'essaie ça et je te dit ce qu'il en est.

Merci beaucoup
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 14h21   #6
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
En fait mon objet est bien stocké, c'est juste que la fonction isRegistered ne me retourne rien , je vais la regarder de plus près.

PS : Aucune exception ni erreur ne s'affiche.
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 14h40   #7
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
J'ai été farfouiller un peu dans le code
Code :
1
2
3
4
5
 
    static public function isRegistered($name)
    {
		return isset(self::$_registry[$name]);
    }
Voilà la fonction isRegistered tel quelle est dans Zend.php.
J'ai essayé de faire un echo du isset à l'interieur même de la fonction mais rien à faire, rien ne s'affiche . Je ne sais vraiment plus quoi faire , mon objet s'enregistre bien mais impossible de tester s'il existe.
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 21h04   #8
Membre actif
 
Inscription : décembre 2002
Messages : 325
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2002
Messages : 325
Points : 187
Points : 187
Est-ce que tu pourrais poster une partie du code qui pose problème ?
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 09h41   #9
Futur Membre du Club
 
Webmaster
Inscription : mars 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : mars 2005
Messages : 40
Points : 16
Points : 16
Envoyer un message via MSN à Sorcier157
Bon en fait je vais utiliser une méthode différente (avec un champ hidden), je n'ait pas trop le temps de m'attarder dessus . Je réessairai plus tard car cela m'intéresse d'utiliser au maximum les capacités de Zend.

Merci beaucoup pour ton aide
Sorcier157 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h45   #10
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Le code du registre du ZF a changé sur la version 0.6.
Il étend maintenant 'ArrayObject' de manière à retourner des références d'arguments, et non des copies comme c'était le cas actuellement avec les tableaux stockés en registre.

Essaye sur la version 0.6, ou au pire, poste une portion de ton code 'bloquant' ici, car je ne comprends pas non plus l'origine de ton problème ... ^^
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web