【问题标题】:Autoloading Zend Framework 2 packages with the StandardAutoloader使用 StandardAutoloader 自动加载 Zend Framework 2 包
【发布时间】:2013-03-03 02:17:37
【问题描述】:

我之前使用的是 Zend Framework 2 的下载版本,基本上可以执行以下操作:

// Set include paths (add Zend to the path)
set_include_path(get_include_path() . PATH_SEPARATOR . $__CONFIG['zendPath']);

// Setup the Zend Autoloader
require_once('library\Zend\Loader\StandardAutoloader.php');

$autoLoader = new StandardAutoloader(array(
    'namespaces' => array(
        'Zend' => $__CONFIG['zendPath'] . '/library/Zend'
    )
));

这是可行的,因为所有 Zend 包都在库文件夹中。我现在想使用 composer 只加载我需要的 Zend 包。我遇到的问题是包的排列方式如下:

zendframework/zend-cache/Zend/...
zendframework/zend-loader/Zend/...
zendframework/zend-validator/Zend/...
etc.

我尝试在 StandardAutoloader 中使用单独的命名空间声明,如下所示:

$autoLoader = new StandardAutoloader(array(
    'namespaces' => array(
        'Zend\Cache' => $__CONFIG['zendPath'] . '/library/zend-cache/Zend/Cache',
        'Zend\Loader' => $__CONFIG['zendPath'] . '/library/zend-loader/Zend/Loader',
        'Zend\Validator' => $__CONFIG['zendPath'] . '/library/zend-validator/Zend/Validator'
    )
));

这行不通。假设命名空间中可能没有反斜杠吗?有什么办法可以使这项工作?最好不必定义每个单独的包。

【问题讨论】:

    标签: zend-framework2


    【解决方案1】:

    你只需要修复路径:

    $libs = $__CONFIG['zendPath'];
    $autoLoader = new StandardAutoloader(array(
        'namespaces' => array(
            'Zend\Cache' => $libs . '/library/zend-cache/Zend',
            'Zend\Loader' => $libs . '/library/zend-loader/Zend',
            'Zend\Validator' => $libs . '/library/zend-validator/Zend',
        )
    ));
    

    这应该可以解决问题(它未经测试,所以我不确定尾随 Zend

    【讨论】:

      【解决方案2】:

      让它为你自动加载 Zend:

      $autoLoader = new StandardAutoloader(array(
          'autoregister_zf' => true, // Auto load Zend Namespace..
          'namespaces' => array(
               // extra namespaces
          )
      ));
      

      【讨论】:

      • 这样手动包含包时不起作用
      • 你确定吗?它只是注册了 Zend 命名空间。它是完全相同的结构,它不应该有所作为吗?
      • 不,该特定标志假定库位于单个位置:请参阅github.com/zendframework/zf2/blob/release-2.1.3/library/Zend/…
      • 啊,我的糟糕,我从来没有意识到它们在不同的文件夹中
      • 不明白为什么它们都不能被困在 Zend 文件夹中...... :)
      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多