2

我的目录结构是这样的:

  • c:\工作区\Zend
  • c:\Workspaces\自定义库

自定义库是一个共享库,在其他应用程序中使用。它不使用命名空间,只使用旧式下划线。

我下载了 ZF2-Restful-Module-Skeleton,我打算将其用作 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_Res_Chain_Mutable'

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

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

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

4

3 回答 3

3

您需要配置StandardAutoloader以加载您的库类。最简单的方法是修改 Application 模块的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键,然后列出了前缀名称以及在磁盘上的位置。标准自动加载器文档有更多详细信息。

如果您正在使用Zend Skeleton 应用程序,您也可以简单地将这些名称空间添加到您的init_autoloader.php文件中。

于 2013-02-19T08:20:55.373 回答
2

你的类的命名空间是Main\Controller. 如果您在此处实例化一个新类,new CL_Res_Chain_Mutable()php 将相对于当前命名空间加载它Main\Controller\CL_Res_Chain_Mutable。您的类不是命名空间类,因此您需要从根目录加载它。只需在前面放一个\ new \CL_Res_Chain_Mutable()

于 2013-02-19T08:16:03.617 回答
0

默认情况下,您的应用程序将使用标准自动加载程序 (PSR-0)。这将根据命名空间和 ZF2 使用的命名约定找到您的文件。ZF2 将允许您注册多个 Autoloader,因此您可以使用不同的策略,这是您需要做的,这是一个示例:

模块.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 首先检查类映射,如果找不到它要查找的内容,它将恢复为标准自动加载器。

http://framework.zend.com/manual/2.0/en/modules/zend.loader.class-map-autoloader.html

于 2013-02-19T08:57:24.407 回答