Zend Framework: автозагрузка библиотеки классов

У меня есть библиотека классов, определенная здесь … / projectname / library / Me / Myclass.php определяется следующим образом:

<?php class Me_Myclass{ } ?> 

У меня есть следующий бутстрап:

 <?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); } } 

В моем контроллере я пытаюсь создать экземпляр класса следующим образом:

 <?php class SomeController extends Zend_Controller_Action { public function indexAction() { $classMaker=new Me_Myclass(); } } ?> 

Когда я перехожу непосредственно к http: /something.com/projectname/some? Id = 1, я получаю следующую ошибку:

Неустранимая ошибка: класс «Me_Myclass» не найден в /home/myuser/work/projectname/application/controllers/SomeController.php в строке x

Есть идеи?

Потенциально важная тематика:

Автозагрузчик, похоже, работает, когда я расширяю модели с классами, которые я определил в других папках в приложении / библиотеке.

Кто-то предложил изменить «По умолчанию», который я попытался, но он, похоже, не устранил проблему и имел дополнительное негативное влияние функции разрыва моделей, использующих это пространство имен.

Класс должен быть назван Me_Myclass:

 class Me_Myclass { } 

Переместите вашу библиотечную папку на уровень, чтобы у вас была структура папок:

 / /application /library /public 

А затем в вашем Bootstrap добавьте следующее в _initAutoload ():

  Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); 

вы можете определить файл autoload в файле config.ini следующим образом:

 autoloaderNamespaces[] = "Me_" ;You could add as many as you want Classes dir: autoloaderNamespaces[] = "Another_" autoloaderNamespaces[] = "Third_" 

работает 100%

Я думаю, что @ smack0007 означает замену содержимого вашего метода _initAutoload с помощью Zend_Loader_Autoloader :: getInstance () -> registerNamespace ('Me_'); поэтому он выглядит так:

 protected function _initAutoload() { Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); } 

Не уверен, что это ваша проблема, но я просто провел последний день и половину, пытаясь выяснить мою собственную аналогичную проблему (впервые загрузив ее в Linux из Windows). Оказывается, я был слеп к случаю с именем папки в моей библиотеке.

 /library /Tlib 

это не то же самое (на * nix)

 /library /tlib 

Имя класса обычно

 class Tlib_FooMe { ... } 

Надеюсь, это поможет кому-то, кто тоже рассеян.