我的目录结构如下
app/
config/
data/
libraries/
Erfurt/
/module
/public
/vendor
我想使用爱尔福特图书馆。 Erfurt 不使用命名空间,而是使用供应商下划线类命名约定,例如。 G。 Erfurt_App 类
。
我在网上找到了不同的答案,但没有任何帮助。这是我测试过的:
app/module/module.php
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
'prefixes' => array(
'Erfurt' => __DIR__ . '/../libraries/Erfurt/',
),
),
);
}
如果我尝试使用 Erfurt 类,PHP 无法找到它。
$erfurt = \Erfurt_App::getInstance();
上面写着
Fatal error: Class 'Erfurt_App' not found in (...)\app\module\Application\src\Application\Controller\ApplicationController.php on line 24
将爱尔福特图书馆包含在我的应用程序中的正确方法是什么?
最佳答案
根据 @Xerkus 评论,它是如何工作的:
- 移动了Erfurt目录从 app/libraries/Erfurt 到 app/vendor/Erfurt
- 另外,Erfurt 需要较旧的 Zend 版本,因此我还提取了 ontowiki-0.9.6-21.7z/ontowiki-0.9.6-21/libraries/Zend 进入app/libraries/Zend
- 将类映射添加到app/composer.json:
"autoload":{
"classmap": ["vendor/Erfurt", "vendor/Zend"]
},
4. 因为 Erfurt 通过 require_once 'Zend/Version.php';
包含 Zend 类我还需要将包含路径添加到 app/composer.json:
"include-path": ["vendor"]
现在我可以使用爱尔福特:
$erfurt = \Erfurt_App::getInstance();
最后app/composer.json看起来像:
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.*",
"cpliakas/git-wrapper": "~1.0"
},
"autoload":{
"classmap": ["vendor/Erfurt", "vendor/Zend"]
},
"include-path": ["vendor"]
}
关于php - ZF2 中的寄存器库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057023/