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

Есть идеи?

Потенциально относящийся к делу сборник:

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

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

Author: Charles, 2010-01-28

4 answers

Ваш класс должен иметь имя Me_Myclass:

class Me_Myclass
{
}

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

/
    /application
    /library
    /public

А затем в вашей начальной загрузке добавьте следующее в _initAutoload():

    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
 12
Author: smack0007, 2010-01-28 09:31:07

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

autoloaderNamespaces[] = "Me_"


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

Работает на 100%

 2
Author: jipipayo, 2012-07-19 13:01:51

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

protected function _initAutoload()
{
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
 1
Author: Wannabeweb, 2010-06-16 05:30:04

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

/library
    /Tlib

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

/library
    /tlib

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

class Tlib_FooMe {
 ...
}

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

 0
Author: Edward Hew, 2010-07-08 09:46:16