我需要在Zend Framework 2.0 中为自定义类使用自动加载 . 我的自定义库位于 /vendor/Garvey/library/Garvey
. 我在 /vendor/Garvey/library/Garvey/Db/Table/AbstractTable.php
中有一个简单的扩展AbstractTable类:
<?php
namespace Garvey\Db\Table;
use Zend\Db\Table\AbstractTable;
abstract class AbstractTable extends AbstractTable
{
public function getItemById($id)
{
}
}
在index.php中,我有以下代码:
require_once 'vendor/ZendFramework/library/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' => array(
'prefixes' => array(
'Garvey' => 'vendor/Garvey/library/Garvey',
)
)));
但是我有以下错误 . 我错过了什么?
Fatal error: Class 'Garvey\Db\Table\AbstractTable' not found
先感谢您 .
5 回答
如果您将'前缀'键更改为'名称空间'并指定如下所示的路径,则原始index.php也会起作用:
或者你可以在Module.php中使用defime方法
但我不推荐它 . 由于ZF2的目的都是以自动加载速度为中心,因此最好的方法是使用class_map样式来加载类 . 它最终会更快,但需要额外的工作 . 您可以在class_map文件中注册每个类 .
您可以在库的根目录中创建class_map.php并放在那里
并添加尽可能多的类 . 在getAutoloaderConfig()中,您可以添加classmap
Matthew Weier O'Phinney在this video解释说现在有3种自动加载方法:
ZF1样式的include_path自动加载器(旧的zf1方法,不推荐)
每个命名空间/前缀自动加载(新的zf2方法,更好)
Class-map autoloading(推荐和最快)
文档中提到了class-map generator实用程序,它将负责为您编写
/vendor/vendor_name/library/autoload_classmap.php
.您找到的解决方案类似于Matthew在视频中提到的每个命名空间/前缀自动加载的解决方案 . 遵循ZendSkeletonApplication中的代码结构,该代码将放在
/init_autoloader.php
文件中,而不是/public/index.php
文件中 .我找到了答案 . 把它放在你的index.php中:
快速浏览this post .
现在,下一步是将一些代码添加到我们的自定义库中 .
首先打开一个文件
./vendor/Garvey/autoload_classmap.php
接下来是
./vendor/Garvey/Module.php
现在在库中创建文件夹中的文件:
./vendor/Kdecom/library/Kdecom/Db/Table/AbstractTable.php
我们需要做的最后一件事是将此库添加到
application.config.php
文件中 .所以你的
application.config.php
文件会看起来像这样......