Zend Framework: une auto-chargement de bibliothèque de classes
-
23-09-2019 - |
Question
J'ai une bibliothèque de classe définie ici ... / projectname / bibliothèque / Me / Myclass.php définie comme suit:
<?php
class Me_Myclass{
}
?>
J'ai le bootstrap suivant:
<?php
/**
* Application bootstrap
*
* @uses Zend_Application_Bootstrap_Bootstrap
*/
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Bootstrap autoloader for application resources
*
* @return Zend_Application_Module_Autoloader
*/
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Default',
'basePath' => dirname(__FILE__),
));
$autoloader->registerNamespace('Me_');
return $autoloader;
}
/**
* Bootstrap the view doctype
*
* @return void
*/
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
/**
* Bootstrap registry and store configuration information
*
* @return void
*/
protected function _initRegistry()
{
$config = new Zend_Config_Ini(APPLICATION_PATH .
'/configs/application.ini', APPLICATION_ENV,
array('allowModifications'=>true));
Zend_Registry::set('configuration', $config);
}
}
Dans mon contrôleur j'essaie d'instancier la classe comme ceci:
<?php
class SomeController extends Zend_Controller_Action
{
public function indexAction()
{
$classMaker=new Me_Myclass();
}
}
?>
Quand je navigue directement à http: /something.com/projectname/some id = 1 J'obtiens l'erreur suivante:
Erreur fatale: Classe 'Me_Myclass' introuvable dans /home/myuser/work/projectname/application/controllers/SomeController.php en ligne x
Toutes les idées?
potentiellement Pertinent Miscellanées:
Le chargeur automatique semble fonctionner quand je suis l'extension des modèles avec des classes que j'ai définis dans d'autres dossiers sous application / bibliothèque.
Quelqu'un a suggéré de changer le « défaut », que je tentais, mais il ne semble pas résoudre le problème et a eu l'impact négatif supplémentaire de rupture fonction des modèles utilisant cet espace de noms.
La solution
a besoin de vous classe comme nom Me_Myclass:
class Me_Myclass
{
}
Déplacer votre dossier de bibliothèque un niveau afin que vous ayez la structure du dossier:
/
/application
/library
/public
Et puis dans votre Bootstrap ajouter ce qui suit à la _initAutoload ():
Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
Autres conseils
vous pouvez définir le répertoire autoload dans le fichier config.ini comme ceci:
autoloaderNamespaces[] = "Me_"
;You could add as many as you want Classes dir:
autoloaderNamespaces[] = "Another_"
autoloaderNamespaces[] = "Third_"
fonctionne à 100%
Je pense que @ smack0007 moyens remplacer le contenu de votre méthode _initAutoload avec Zend_Loader_Autoloader :: getInstance () -> registerNamespace ( 'Me_'); il ressemble à ceci:
protected function _initAutoload()
{
Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
Je ne sais pas si cela est votre problème, mais je viens de passer le dernier jour et la moitié à essayer de comprendre mon problème similaire (première fois le chargement sur Linux à partir de Windows). J'étais S'avère aveugle au cas du nom du dossier de ma bibliothèque.
/library
/Tlib
est pas le même que (le * nix)
/library
/tlib
nom de classe est généralement ce
class Tlib_FooMe {
...
}
Espérons que cela aide quelqu'un qui est tout aussi distraite.