У меня есть библиотека классов, определенная здесь … / 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 { ... }
Надеюсь, это поможет кому-то, кто тоже рассеян.