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

MVC PHP Discussion :

Fatal error: Cannot access self::


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut Fatal error: Cannot access self::
    Salut à tous.

    Aidez moi à interpréter cette erreur:


    Fatal error: Cannot access self:: when no class scope is active in C:\xampp\htdocs\zfAntivirus\library\My\Acl.php on line 14

    plus particulièrement la phrase:

    when no class scope is active

    je ne parvienspas à la saisie.

    Merci.

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    le message d'erreur indique que le code n'est pas utilisé dans un classe
    montre nous le code avec les déclaration des classes et des méthodes

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Voilà le controleur dans lequel j'ai utilisé le code:

    C'est la l'instruction :
    $acl = My_Acl::getInstance();
    qui provoque cette erreur.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    class LoginController extends App_Controller_Action
    {
     
        protected $_flashMessenger;
     
     
       public function init()
       {
        parent::init();
        $this->_flashMessenger = $this->_helper->FlashMessenger;
       }
     
     
     
     
       public function connexionAction()
       {
     
      if ($_SERVER['REQUEST_METHOD'] == "POST") { // venons-nous ici depuis une méthode POST ?
     
              if ($form->isValid($_POST)) { // si le formulaire est valide avec les données POST reçues
     
    			 	$acl = My_Acl::getInstance();
    				App_Db_Table_Row::setAcl($acl);
     
    				$TMembres = new TMembres();
    				$membre   = $TMembres->createRow();
    				$membre->login    = $_POST['login'];
    				$membre->mdp = $_POST['password'];
     
    				$result = $membre->authenticate(1800); 
    				if (!$result->isValid()) {
       					 exit('login ou mot de passe incorrect');
    				}
     
    				if ($acl->isAllowed($membre, 'une ressource, par exemple "livres"', 'un doit, par exemple "liste"')) {
       					 echo "Ok autorisé";
    				} else {
      					  echo "KO non autorisé";
    				}  			  
     
     
              } else {
                  $form->populate($_POST); // sinon on remplit tous les champs avec les valeurs reçues
     
              }
    	}
     
            $this->view->form = $form;      
     
     
     
     
     
       }
     
     
    }

    et voilà la classe My_Acl:


    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
    39
    40
    class My_Acl extends App_Acl
    {
     
        public static function getInstance($clearSession = false)
        {
            function getInstance()
    	    {
    	        if (self::$_instance == null) {
                    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;
        }
     
        protected function _init()
        {
            $this->add(new Zend_Acl_Resource('licence'))
                 ->addRole(new Zend_Acl_Role('gestionnaire'), 'guest')
                 ->addRole(new Zend_Acl_Role('admin'));
     
            $this->allow('admin');
            $this->allow('gestionnaire', 'licence', 'add');
            $this->allow('guest','licence', 'liste');
        }
    }

    Enfin voilà la classe App_Acl: je vous rappelles que mon code est basé sur l'atelier
    Autorisations : lier les ACLs aux contrôleurs et objets métiers.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    <?php
    class App_Acl extends Zend_Acl
    {
         /**
         * Rôle par défaut
         * 
         * @var string
         */
        protected static $_defaultRole = 'guest';
     
        /**
         * Nom du namespace de session
         * 
         * @var string
         */
        protected static $_sessionNamespace = 'acl';
     
        /**
         * Instance singleton
         * 
         * @var App_Acl
         */
        protected static $_instance;
     
        /**
         * Objet namespace
         * 
         * @var Zend_Session_Namespace
         */
        protected static $_session;
     
        /**
         * Injection de paramètres
         * 
         * @var array $params
         */
        public static function setParams(array $params)
        {
            if (isset($params['defaultRole'])) {
                self::$_defaultRole = $params['defaultRole'];
            }
            if (isset($params['sessionNamespace'])) {
                self::$_sessionNamespace = $params['sessionNamespace'];
            }
        }
     
        /**
         * Récupère l'instance du singleton en gèrant la persistance
         * /!\ LSB : *doit* être redéfini dans les filles
         * 
         * @param bool $clearSession détruit la session auparavant
         * @return App_Acl
         */
        public static function getInstance($clearSession = false)
        {
            function getInstance()
    	    {
    	        if (self::$_instance == null) {
                    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;
        }
     
    	 /**
         * Constructeur
         * 
         * final : ne peut être redéfinie, le rôle par défaut doit exister
         */
        final protected function __construct()
        {
            $this->addRole(new Zend_Acl_Role($this->getDefaultRole()));
            $this->_init();
        }
     
        /**
         * A redéfinir dans les filles : constructeur
         */
        protected function _init() { }
     
        /**
         * Récupère le rôle par défaut
         * 
         * @return string
         */
        public function getDefaultRole()
        {
            return self::$_defaultRole;
        }
     
     
        public function allow($roles = null, $resources = null, $privileges = null, Zend_Acl_Assert_Interface $assert = null)
        {
            $return = parent::allow($roles, $resources, $privileges, $assert);
            if (self::$_session !== null) {
                self::$_session->acl = $this;
            }
            return $return;
        }
     
        public function deny($roles = null, $resources = null, $privileges = null, Zend_Acl_Assert_Interface $assert = null)
        {
            $return = parent::deny($roles, $resources, $privileges, $assert);
            if (self::$_session !== null) {
                self::$_session->acl = $this;
            }
            return $return;
        }
     
     
     
    }

  4. #4
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par google_c# Voir le message
    je vous rappelles que mon code est basé sur l'atelier
    Autorisations : lier les ACLs aux contrôleurs et objets métiers.
    dans ce article, il y a expliqué que le code a été "trafiqué" pour fonctionner avec PHP 5.2
    peut-être que tu as une erreur parce que tu utilises PHP 5.3 ?

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Salut.

    Si, j'ai bien constaté que le code a été "trafiqué" pour fonctionner avec PHP 5.2

    et je ne sais comment l'adapter avec PHP 5.3, puisque quand j'utilise static:: en lieu et place de self:: et en supprimant la methode getinstance() dans la classe My_App j'ai la même erreur avec stactic en lieu et place de self.

    SVP aidez moi!

    Cordialement.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Dans My_App, tu déclare une méthode getInstance, que tu redéclares dans cette même méthode une autre fonction getInstance, qui ceux-la même sont déclaré dans App_Acl

Discussions similaires

  1. [PDO] Fatal error: Cannot pass parameter 2 by reference
    Par Tchupacabra dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/05/2008, 12h37
  2. Réponses: 4
    Dernier message: 14/02/2008, 20h41
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. Fatal error: Cannot redeclare extension()
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2007, 12h56
  5. Réponses: 3
    Dernier message: 30/11/2006, 20h54

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