Платформа зенда: автозагрузка библиотеки классов

У меня есть библиотека классов в определенном, здесь.../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

Какие-либо идеи?

Потенциально Подходящие вспомогательные операции:

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

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

8
задан Charles 6 April 2011 в 03:09
поделиться

3 ответа

Вы должны иметь имя me_myclass:

class Me_Myclass
{
}

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

/
    /application
    /library
    /public

, а затем в вашем загрузке добавьте следующее на _initautoload ():

    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
13
ответ дан 5 December 2019 в 10:41
поделиться

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

protected function _initAutoload()
{
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
1
ответ дан 5 December 2019 в 10:41
поделиться

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

/library
    /Tlib

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

/library
    /tlib

Обычно имя класса это

class Tlib_FooMe {
 ...
}

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

0
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: