Zend Framework: Autoloading eine Bibliothek-Klasse,
Habe ich ein Bibliothek-Klasse in die hier definierten .../projectname/library/Me/Myclass.php wie folgt definiert:
<?php
class Me_Myclass{
}
?>
Habe ich die folgende 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);
}
}
In meinem controller habe ich versucht zu instanziieren Sie die Klasse wie folgt aus:
<?php
class SomeController extends Zend_Controller_Action
{
public function indexAction()
{
$classMaker=new Me_Myclass();
}
}
?>
Wenn ich direkt navigieren http:/something.com/projectname/some?id=1 ich bekomme die folgende Fehlermeldung:
Fatal error: Class 'Me_Myclass' not found in /home/myuser/work/projectname/application/controllers/SomeController.php auf der Linie x
Irgendwelche Ideen?
Potenziell Relevant Sonstiges:
Den autoloader zu funktionieren scheint, wenn ich die Erweiterung von Modellen mit Klassen, die ich definiert habe in anderen Ordner unter application/Bibliothek.
Jemand schlug vor, die änderung der 'Default', die ich versucht, aber es hat nicht angezeigt, das problem zu beheben, und hatte den zusätzlichen negativen Auswirkungen zu brechen-Funktion der Modelle, die mit diesem namespace.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du Klasse muss dem Namen Me_Myclass:
Bewegen Sie Ihre library-Ordner eine Ebene nach oben, so dass Sie über die Ordner-Struktur:
Und dann in der Bootstrap Datei fügen Sie den folgenden, um die _initAutoload():
definieren Sie die autoload dir in der config.ini-Datei wie folgt:
funktioniert zu 100%
Ich denke, @smack0007 bedeutet, ersetzen Sie den Inhalt Ihrer _initAutoload Methode mit Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); also es sieht wie folgt aus:
Nicht sicher, ob dies Ihr problem ist, aber ich verbrachte den letzten Tag und die Hälfte versucht, herauszufinden, meine eigenen ähnlichen problem (erste mal, laden Sie es auf Linux von Windows aus). Stellt sich heraus, ich war blind für meine Bibliothek Ordner mit dem Namen Fall.
ist nicht das gleiche wie (unter *nix)
Klasse name ist in der Regel diese
Hoffe, dies hilft jemand, der ist ähnlich wie geistesabwesend.