Как обмануть загрузчик Zend для нескольких классов в одном файле - PullRequest
0 голосов
/ 29 мая 2011

Я пытаюсь реализовать пользовательские классы исключений для проекта Zend.Я использую модули, и все мои классы под library.так что имя файла DuplicateFileException.php, которое находится под APPLICATION_PATH "/../library/Abra/Exception", содержит

class Abra_Exception_FileNotFoundExcpetion extends Exception {}
class Abra_Exception_MissingFileException extends Exception {}
class Abra_Exception_DuplicateFileException extends Exception {}
class Abra_Exception_FileIOException extends Exception {}

, поэтому ErrorController работает нормально, когда я только выбрасываю Abra_Exception_DuplicateFileException, потому что действительно есть файл с именем DuplicateFileException, но приложение разрывается, когда я выкидываюкроме этого исключения.

Я просто не могу поверить, что мне нужно создать файл для каждого из них.так как обойти это?

спасибо за чтение.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Правильный Zend-Way будет реализовывать свой собственный класс автозагрузчика.Он будет реализовывать метод автозагрузки.Затем вы можете использовать стек автозагрузчика Zend_Autoloader для загрузки ваших классов.Вам просто нужно иметь какую-то систему / логику в вашем отображении имени класса-> имени файла.

class Abra_Autoloader 
{
    public function autoload($className)
    {
        if (strpos('Abra_Exception', $className) !== false) {
            include $someFile; //faster
        }
    }
}

//anywhere in bootstrap (preferably in some autoloading section of yours)
//  autoloader will load only classes starting with "abra"
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
$autoloader->pushAutoloader(array('Abra_Autoloader ', 'autoload'), 'Abra'); 

Обратите внимание, что хотя бы класс автозагрузчика должен загружаться Zend_Loader :)

1 голос
/ 29 мая 2011

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

Если вы действительно хотите сохранить этот путь, я просто включил бы файл в ваш класс Bootstrap, например,

protected function _initRequires()
{
    require_once 'Abra/Exception/DuplicateFileException.php';
    // assuming your "library" folder is on the include path
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...