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_Acl & Zend_Auth PHP Discussion :

Tutoriel Autorisations : lier les ACLs aux contrôleurs et objets métiers self et scope [ZF 1.9]


Sujet :

Zend_Acl & Zend_Auth PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut Tutoriel Autorisations : lier les ACLs aux contrôleurs et objets métiers self et scope
    Bonjour à tous,

    J'essaie de mettre en pratique le tuto de Julien sur les ACL

    http://julien-pauli.developpez.com/t...telier/aclmvc/

    Je rencontre néanmoins un problème, j'ai l'erreur suivante:

    Fatal error: Cannot access self:: when no class scope is active in /home/www/Test/library/My/Acl.php on line 16

    Dans le fichier Acl.php j'ai ceci:
    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
     
    class My_Acl extends JP_Acl
    {
       public static function getInstance($clearSession = false)
        {
            function getInstance()
            {
                if (self::$_instance == null) { // LIGNE 16
                    self::$_instance = new self();
                }
                return self::$_instance;
            }
     
            if (self::$_sessionNamespace !== null) {
                if ($clearSession) {
                    Zend_Session::namespaceUnset(self::$_sessionNamespace);
                }
                self::$_session = new Zend_Session_Namespace(self::$_sessionNamespace);
                if (isset(self::$_session->acl)) {
                    self::$_instance = self::$_session->acl;
                } else {
                    self::$_instance = getInstance();
                }
            } else {
                self::$_instance = getInstance();
            }
            return self::$_instance;
        }
    }
    A savoir que j'appelle la classe dans la methode _initAcl() de mon bootstrap:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initAcl()
        {
            $acl = My_Acl::getInstance();
            $front = $this->bootstrap('FrontController')->getContainer()->frontcontroller;
            $front->setParam('acl', $acl);
        }
    }
    Bon, j'avoue, j'ai copié collé le code juste pour tester avant de me plonger rapidement dans la compréhension du tout. Mais j'ai encore des lacunes sur la maîtrise des objets en php et je ne comprend pas cette erreur.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    Bonjour manuscle,

    En suivant à la lettre le tuto de Julien Pauli, j'ai eu exactement la même erreur.

    J'ai réglé le problème en réécrivant la méthode getInstance (dans JP_Acl et My_Acl) comme ceci :

    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
    public static function getInstance($clearSession = false)
    {
        if (self::$_sessionNamespace !== null) {
            if ($clearSession) {
                Zend_Session::namespaceUnset(self::$_sessionNamespace);
            }
            self::$_session = new Zend_Session_Namespace(self::$_sessionNamespace);
            if (isset(self::$_session->acl)) {
                self::$_instance = self::$_session->acl;
            } else {
                if (self::$_instance == null) {
                    self::$_instance = new self;
                }
            }
        } else {
            if (self::$_instance == null) {
                self::$_instance = new self;
            }
        }
        return self::$_instance;
    }
    J'ai simplement supprimé la petite fonction getInstance qui était a l'intérieur de la méthode. Je pense que c'est cela qui perturbait PHP. Et perso je n'aime pas trop avoir des méthodes à l'intérieur d'autres méthodes ^^

  3. #3
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Merci de ta réponse

    Effectivement j'ai pu resoudre le probleme aussi de mon coté

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

Discussions similaires

  1. Pourquoi l'un des sous-forum n'autorise pas les réponses aux messages ?
    Par Deuzz dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 6
    Dernier message: 23/10/2014, 23h34
  2. [ZF 1.10] Zend Acl gestion des autorisations sur les actions
    Par gogololo dans le forum Zend Framework
    Réponses: 2
    Dernier message: 28/07/2010, 10h27
  3. Réponses: 23
    Dernier message: 04/02/2010, 14h12

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