我在MyNamespace
中创建了一个子文件夹/vendor/
(它是自己库的正确位置吗?)并希望在我的应用程序中使用MyNamespace\Mvc\Router\MyCustomRouter
这样的类。如何将此库包含在基于命名空间的自动加载中?
答案 0 :(得分:3)
除了Rob的回答,还有其他一些自动加载自定义库的方法
首先,确保您的文件夹结构符合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',
),
),
);
}
使用index.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/',
);
答案 1 :(得分:1)
修改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',
),
)
));
}
}
请注意在MyNamespace
部分添加Zend\Loader\StandardAutoloader
密钥。
答案 2 :(得分:0)
您也可以使用composer autoloading
{
"autoload": {
"psr-0": {"MyNamespace\\": "vendor/MyNamespace/"}
}}