2013-03-27 59 views
2

我在/vendor/中创建了一个子文件夹MyNamespace(它对于自己的库是否是正确的位置?),并且希望在我的应用程序中使用像MyNamespace\Mvc\Router\MyCustomRouter这样的类。我如何将这个库包含到基于名称空间的自动加载?如何使用基于名称空间的自动加载将库包含到Zend Framework 2应用程序中?

+0

可能的复制 - > http://stackoverflow.com/questions/8559107/autoload-custom-library-in-zend-framework-2-0?rq=1 – Crisp 2013-03-27 15:25:00

+0

我('Module#getAutoloaderConfig()'和''MyNamespace'=> __DIR__)显示了如何[在这里](http://stackoverflow.com/a/10974043/2019043)。 '/../../ vendor/MyNamespace'),但是我的类仍然无法找到。 – automatix 2013-03-27 15:27:14

+0

您是否在'/ vendor/MyNamespace /中创建了一个Module.php文件来做到这一点? – Crisp 2013-03-27 15:28:41

回答

0

编辑init_autoloader.php和改变if ($zf2Path) {部分是:

if ($zf2Path) { 
    if (isset($loader)) { 
     $loader->add('Zend', $zf2Path); 
    } else { 
     include $zf2Path . '/Zend/Loader/AutoloaderFactory.php'; 
     Zend\Loader\AutoloaderFactory::factory(array(
      'Zend\Loader\StandardAutoloader' => array(
       'autoregister_zf' => true, 
       'namespaces' => array(
        'MyNamespace' => __DIR__ . '/vendor/MyNamespace', 
       ),      
      ) 
     )); 
    } 
} 

注意添加Zend\Loader\StandardAutoloader段内的MyNamespace关键的。

2

除了罗布的回答,一些其他的方式来自动加载自定义库

首先,确保你的文件夹结构PSR0兼容

在示例中使用的神话PSR0兼容myNameSpace对象库的典型结构

vendor/ 
    MyNamespace/ 
     lib/ 
      MyNamespace/ 
       FooClass.php 
       BarClass.php 

使用getAutoloaderConfig

public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/lib/MyNamespace', 
      ), 
     ), 
    ); 
} 
一个Module.php文件包括在

直接使用AutoloaderFactory配置StandardAutoloader

// Setup autoloading 
require 'init_autoloader.php'; 

Zend\Loader\AutoloaderFactory::factory(array(
    'Zend\Loader\StandardAutoloader' => array(
     'namespaces' => array(
      'MyNamespace' => __DIR__ . '/../vendor/MyNamespace/lib/MyNamespace', 
     ), 
    ) 
)); 

你甚至可以做同样的./config/autoload/文件

<?php  
// file ./config/autoload/namespaces.local.php 

Zend\Loader\AutoloaderFactory::factory(array(
    'Zend\Loader\StandardAutoloader' => array(
     'namespaces' => array(
      'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/lib/MyNamespace', 
     ), 
    ) 
)); 

另一个替代方案,包括您的LIB是编辑vendor/composer/autoload_namespaces.php

<?php 

// autoload_namespaces.php generated by Composer 

$vendorDir = dirname(__DIR__); 
$baseDir = dirname($vendorDir); 

return array(
    'Zend\\' => $vendorDir . '/zendframework/zendframework/library/', 
    'MyNamespace\\' => $vendorDir . '/MyNamespace/lib/', 
); 
相关问题