Zend Framework: Chargement d'une Bibliothèque de Classe
J'ai une bibliothèque de classes définies ici .../projectname/library/Me/Myclass.php définis comme suit:
<?php
class Me_Myclass{
}
?>
J'ai la suite de bootstrap:
<?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 j'ai accédez directement à http:/something.com/projectname/some?id=1 j'obtiens l'erreur suivante:
Fatal error: Class 'Me_Myclass' ne trouve pas dans /home/myuser/work/projectname/application/controllers/SomeController.php sur la ligne x
Des idées?
Potentiellement Pertinents, Florilège:
L'autochargeur semble fonctionner quand je suis à l'extension des modèles avec des classes que j'ai définies dans d'autres dossiers en vertu de l'application/de la bibliothèque.
Quelqu'un a suggéré de remplacer "par Défaut", j'ai essayé mais ça ne semble pas résoudre le problème et a ajouté l'impact négatif de la rupture de la fonction de modèles à l'aide de cet espace de noms.
OriginalL'auteur user250120 | 2010-01-28
Vous devez vous connecter pour publier un commentaire.
Vous classe doit être le nom Me_Myclass:
Déplacer votre dossier de bibliothèque jusqu'à un niveau de sorte que vous avez la structure de dossiers:
Et puis dans le fichier de démarrage ajouter le texte suivant à la _initAutoload():
Veuillez mettre à jour votre réponse à montrer les changements dans le code que vous avez fait.
OriginalL'auteur smack0007
vous pouvez définir l'autoload dir dans la config.fichier ini comme ceci:
fonctionne à 100%
OriginalL'auteur jacktrade
Je pense que @smack0007 moyen de remplacer le contenu de votre _initAutoload méthode avec Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); de sorte qu'il ressemble à ceci:
OriginalL'auteur Wannabeweb
Ne sais pas si cela est votre problème, mais je viens de passer le dernier jour et demi à essayer de comprendre mon propre problème similaire (premier temps de chargement sur Linux à partir de Windows). S'avère que j'étais aveugle à ma bibliothèque du nom de dossier de l'affaire.
n'est pas la même chose que (sur *nix)
Nom de la classe est généralement ce
Espère que cela aide quelqu'un qui est de même distrait.
OriginalL'auteur Edward Hew