2010-08-24 4 views
0

J'essaye d'écrire le plugin de contrôleur pour vérifier l'authentification. J'ai créé la classe de plugin, mis dans le répertoire Application, Application.php et enregistré dans Bootstrap.php. Mais il y a une erreur: Erreur fatale: La classe 'Authentification' est introuvable. Où Zend Framework recherche-t-il les plugins, comment l'indiquer?pourquoi Zend Framework ne trouve pas mon plugin de contrôleur

//Application/Authentication.php 
class Authentication extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $auth = Zend_Auth::getInstance(); 
     if ($auth->hasIdentity()) { 
      return; 
     } 

     self::setDispatched(false); 
     // handle unauthorized request... 
    } 
} 


     //bootstrap 
    protected function _initAutoloader() 
    { 
     $moduleLoader = new Zend_Application_Module_Autoloader(array(
     'basePath' => APPLICATION_PATH, 
     'namespace' => '')); 

     $autoLoader = Zend_Loader_Autoloader::getInstance(); 
     $autoLoader->registerNamespace('Common_'); 

     return $moduleLoader;    
    } 



    protected function _initPlugins() 
    { 
     $controller = Zend_Controller_Front::getInstance(); 
     $controller->registerPlugin(new Authentication()); 
     $controller->dispatch();   
    } 

Merci.

+0

En bootstrap J'utilise aussi: \t fonction _initAutoloader protégée() { \t \t \t $ ModuleLoader = new Zend_Application_Module_Autoloader (tableau ( \t \t 'basePath' => APPLICATION_PATH, \t \t 'espace' => '')); \t \t \t \t $ autoLoader = Zend_Loader_Autoloader :: getInstance(); \t \t $ autoLoader-> registerNamespace ('Common_'); \t \t \t \t return $ moduleLoader; \t \t \t \t} – Oleg

+0

Vous pouvez éditer votre question au lieu d'ajouter des commentaires donnant plus de précisions. Vous pouvez également éditer votre question pour corriger votre premier bloc de code ... –

+0

Merci pour l'information. – Oleg

Répondre

0

Je sais que la question est vraiment ancienne, mais je laisse la réponse au cas où quelqu'un d'autre trébucherait ici comme je l'ai fait. Voici (à partir de la version 1 de 1.8 et plus) comment enregistrer un plugin:

ZF suit la norme de nommage: A_B analyse en A/B.php. Pour le plugin, ZF regarde automatiquement dans le "chemin vers la bibliothèque", ce qui signifie qu'il regarde dans le répertoire de votre bibliothèque (où se trouve votre bibliothèque Zend). Donc le plugin devrait être comme suit: library/Something/Whatever.php ... C'est un scénario. Ensuite, tout ce que vous avez à faire est application.ini ajouter ce qui suit:

autoloaderNamespaces[] = "Something_" 
resources.frontController.plugins.Whatever = "Something_Whatever" 

Traduit à votre cas serait:

autoloaderNamespaces[] = "Common_" 
resources.frontController.plugins.Authentication = "Common_Authentication" 

Et votre structure de la bibliothèque devrait être:

library/Common/Authentication.php 

espérons que cela aide à quiconque trébucher sur ici!

--Regarding votre message/question

La raison pour laquelle pas d'une manière « trouver » la classe parce que d'une manière ne se charge pas avec une manière autoload. L'une des raisons pourrait être que vous ne respectez pas la convention de dénomination (votre fichier d'authentification ne se trouve pas sous le répertoire Common_, ou le nom de fichier de la classe Authentication n'est pas Common_Authentication ...). Une solution rapide serait de mettre:

//bootstrap 
    protected function _initAutoloader() 
    { 
     require_once 'Common/Authentication.php';   
    } 

avec cette ADDES, _initPlugins() sera en mesure d'exécuter sans problème. :)

Questions connexes