我的目录结构如下:
自定义库是一个共享库,在其他应用程序中使用。它不使用命名空间,只使用旧式下划线。
我下载了ZF2-Restful-Module-Skeleton,我打算将其用作一个宁静的服务器。在InfoController中我有这个代码:
namespace Main\Controller;
use Zend\Mvc\Controller\AbstractRestfulController;
class InfoController extends AbstractRestfulController
{
public function getList()
{
$data = array(
'phone' => '+30123456789',
'email' => 'email@domain',
);
$Res = new CL_Res_Chain_Mutable();
return $data;
}
}
错误信息是:
致命错误:在C:\ Workspaces \ Zend \ module \ Main \ src \ Main \ Controller \ InfoController.php中找不到类'Main \ Controller \ CL_Res_Chain_Mutable'
显然,我需要将这个自定义库添加到我的Zend应用程序中,但我在这里“小”丢失了,我真的不知道该怎么做。我用google搜索了几个解决方案,但似乎没有一个像这样。
另外,我在文件夹c:\Workspaces\Custom library 2
中有另一个库,其中包含(以及其他文件)文件(类)D.php,我使用它像D :: dump($ data);
我怎样才能让它在我的Zend应用程序中运行?
答案 0 :(得分:3)
您需要配置StandardAutoloader
以加载库类。最简单的方法是修改应用程序模块的Module::getAutoloaderConfig()
方法,使其看起来像这样:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
'prefixes' => array(
'CL' => 'c:\\Workspaces\\Custom library/CL',
'D' => 'c:\\Workspaces\\Custom library 2/D',
),
),
);
}
我添加了一个prefixes
密钥,然后列出了前缀名称以及在磁盘上找到它的位置。 Standard Autoloader documentation有更多详细信息。
如果您使用Zend Skeleton Application,也可以将这些命名空间添加到init_autoloader.php文件中。
答案 1 :(得分:2)
您班级的名称空间为Main\Controller
。如果你在这里实例化一个新类new CL_Res_Chain_Mutable()
php会相对于当前的命名空间Main\Controller\CL_Res_Chain_Mutable
加载它。您的类不是命名空间类,因此您需要从根加载它。只需在前面放{\ {1}}。
答案 2 :(得分:0)
默认情况下,您的应用程序将使用标准自动加载程序(PSR-0)。这将根据命名空间和ZF2使用的命名对话找到您的文件。 ZF2将允许您注册多个自动加载器,因此您可以使用不同的策略,这是您需要做的,这是一个示例:
Module.php
/**
* Get autoloader config
*
* @return array
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
// File containing class map key/value pairs
__DIR__ . '/library/autoloader_classmap.php',
// Or provide an array with the class map instead...
array(
'Application\Bootstrap' => __DIR__ . '/application/Bootstrap.php',
'CL_Res_Chain_Mutable' => __DIR__ . '/library/pathhere/Mutable.php',
),
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
此设置将使用告诉ZF2首先检查类映射,如果找不到它要查找的内容,它将恢复为标准自动加载器。
http://framework.zend.com/manual/2.0/en/modules/zend.loader.class-map-autoloader.html