Php Zend Framework 2包括自定义库

Php Zend Framework 2包括自定义库,php,zend-framework2,Php,Zend Framework2,我的目录结构如下: public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ),

我的目录结构如下:

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',
            ),
        ),
    );
}
  • c:\Workspaces\Zend
  • c:\Workspaces\customlibrary
自定义库是一个共享库,在其他应用程序中使用。它不使用名称空间,只使用老式下划线

我下载了ZF2 Restful模块框架,打算将其用作Restful服务器。在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\u Res\u Chain\u Mutable”

显然,我需要将这个自定义库添加到我的Zend应用程序中,但我在这里“有点”迷失了,我真的不知道怎么做。我在谷歌上搜索了一些解决方案,但似乎没有一个是这样的

另外,我在文件夹
c:\Workspaces\Custom library 2
中还有另一个库,它(在其他文件中)有文件(class)D.php,我使用的文件类似于D::dump($data)


我怎样才能让它在我的Zend应用程序中像那样工作?

您的类的名称空间是
Main\Controller
。如果在此处实例化一个新类
new CL\u Res\u Chain\u Mutable()
php将相对于当前名称空间
Main\Controller\CL\u Res\u Chain\u Mutable
加载它。您的类不是命名空间类,因此需要从根目录加载它。只需在
新建\CL\u Res\u Chain\u Mutable()

前面放置一个\即可。您需要配置
标准自动加载程序来加载库类。最简单的方法是修改应用程序模块的
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',
            ),
        ),
    );
}
我添加了一个
前缀
键,然后列出了前缀名称以及在磁盘上的位置。报告有更多细节


如果您正在使用,您也可以简单地将这些名称空间添加到文件中。

默认情况下,您的应用程序将使用标准的Autloader(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__,
            ),
        ),
    );
}
此安装程序将使用tell ZF2首先检查类映射,如果找不到要查找的内容,则将恢复为标准自动加载程序


谢谢!我选择了这个作为一个可接受的答案,但是我应该在类名之前添加\的注释也非常有用!我在正确的轨道上,但这些真的帮助我把它钉对了!