У меня есть библиотека классов в определенном, здесь.../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
, а затем в вашем загрузке добавьте следующее на _initautoload ():
Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
Я думаю, @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 {
...
}
Надеюсь, это поможет кому-то, кто так же рассеян.