我的models目录中有一个单例类,我必须在Controller类中使用它的函数。通过require_once('文件路径')来完成;并且调用函数作为ClassName :: FunctionName()工作正常,但我需要使用Zend Autoloader而不是通过require_once包含类。我在stackoverflow上遇到了许多解决方案,它们使用bootstrap.php来添加以下代码,它看起来像require_once('文件路径')一样;在控制器中做了
protected function _initAutoload()
{
Zend_Loader_Autoloader::getInstance();
}
这样我得到了致命的错误:在{line}上的{path} \ controllers \ SampleController.php中找不到类'ClassName' 我确信我错过了一些东西,但无法弄清楚到底是什么。
答案 0 :(得分:2)
就像user1145086正确地说,如果你遵循Zend的命名约定,你的类应该是自动加载的。
如果您有一个类,比如说 AutoloadedClass ,并且您希望它自动加载,您可以执行以下操作:
在Bootstrap的initAutoload类方法中编写以下代码:
Zend_Loader_Autoloader::getInstance()->registerNamespace(array('My_'));
答案 1 :(得分:1)
如果你根据zend约定命名你的类,该类应该自动加载没有问题。 如果您的班级位于 /application/models/myClass.php 并且名为:
class Application_Model_MyClass {
public function myMethod(){
}
}
它应该自动加载就好了,我不认为单身这一事实会影响自动加载。
如果您需要使用自己的类名,可以在 / library 目录中的自动加载器中添加新的命名空间,将此行添加到 application.ini :
autoloaderNamespaces[] = "MyNamespace_"
然后将 / MyNamespace 目录添加到 / library 目录并相应地命名文件:
class MyNamespace_MyClass {
}
希望这有帮助。
答案 2 :(得分:1)
如果库中的类名和位置不遵循Zend naming conventions,那么您可以为该库编写自动加载器并将此自动加载器推送到Zend_Loader_Autoloader
堆栈。