我正在尝试为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 {}
所以当我只抛出Abra_Exception_DuplicateFileException
时,ErrorController工作正常
因为确实存在一个名为DuplicateFileException的文件,但是当我抛出除Exception以外的任何文件时,app会中断。
我无法相信我必须为每个人创建一个文件。 那么如何解决呢?
感谢阅读。
答案 0 :(得分:2)
正确的zend-way将实现您自己的自动加载器类。 IT将实现自动加载方法。然后,您可以使用Zend_Autoloader自动加载器堆栈来运行您的类。您只需要在classname->文件名映射中使用某种系统/逻辑。
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');
请注意,至少teh autoloader类应该是Zend_Loader-loadable :)
答案 1 :(得分:1)
Zend自动加载器的工作原理是将请求的类名映射到文件系统路径,这样就无法为文件名不匹配的类加载文件。
如果您真的想要坚持这条路径,我只需将该文件包含在您的Bootstrap类中,例如
protected function _initRequires()
{
require_once 'Abra/Exception/DuplicateFileException.php';
// assuming your "library" folder is on the include path
}