Zend Framework 2包括自定义库

时间:2013-02-19 08:09:25

标签: php zend-framework2

我的目录结构如下:

  • C:\工作区\ Zend的
  • c:\ Workspaces \ Custom library

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

我下载了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应用程序中运行?

3 个答案:

答案 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