【发布时间】:2015-02-02 07:08:16
【问题描述】:
我正在尝试将我的自定义命名空间用于我的个人课程。
目录结构是(和往常一样):
我的项目/ - 源/ |- myComponent.class.php \- myWrapper.class.php - 小贩 |- 其他库 \- Symfony - 作曲家.json - 索引.php在我的 composer.json 中,我指定了我自己的命名空间:
"autoload": {
"psr-0": {
"my_namespace\\": "src/"
}
}`
然后在我的 PHP 代码中我有类似的东西:
myComponent.class.php
namespace my_namespace;
class myComponent
{
.... code
}
index.php
namespace my_namespace;
require_once __DIR__.'/vendor/autoload.php';
$component = new myComponent();
运行这个我得到:
致命错误:在第 5 行的 /path_to_root/my_project/index.php 中找不到类“my_namespace\myComponent”
而...
我希望在 my_project/src/ 下搜索 myComponent,如 composer.json 中所指定和定义的那样进入 vendor/composer/autoload_namespaces.php (
'my_namespace\\' => array($baseDir . '/src'))。当我将命名空间定义为我自己的命名空间时,我希望直接调用我的自定义 myComponent。我错了吗?
我的代码和假设有什么问题? 我该如何解决?
【问题讨论】:
-
当你使用 psr-0 时,你不需要添加一个 targetDir() 声明吗? getcomposer.org/doc/04-schema.md#target-dir
-
我实际上正在学习 Composer,所以我不确定应该如何设置这个声明。它是我的自定义命名空间的 targetDir 还是我的根/项目目录的 targetDir?我应该将 autoload/psr-0/myNamespace 留空吗? (如链接中的示例所示)|我不明白这个指令应该解决什么问题。
-
我也尝试将
"autoload":{"psr-0"}"更改为"my_namespace\\": ""并添加"target-dir": "src/",但没有解决。仍然找不到类。 -
我建议您查看 vendor/Composer/autoload_psr0.php 文件(并可能将其添加到您的问题中)。如果有机会切换到 psr-4 会更直观。
-
我切换到 psr-4。而且我还发现了问题:1) .class.php 应该只是 php (自动加载器不会自动剥离它) 2) 真丢脸!我有一个区分大小写的错字,导致无法找到正确的文件!
标签: php class namespaces composer-php autoload