这是我第一次使用Composer,我有点Batty试图弄清楚为什么它不拿起我的命名空间。
在我的project/
目录中:
├── composer.json
├── composer.lock
├── composer.phar
├── README.md
├── vendor (truncated)
└── src
├── Config.php
├── Handler.php
└── Router.php
src/config.php
<?php
$project_root = realpath(__DIR__ . '/..');
$autoload = $project_root . '/vendor/autoload.php';
?>
src/router.php
<?php namespace ProjectRouter;
include_once("Config.php");
require $autoload;
use ProjectHandler;
Hello::world();
?>
src/handler.php
<?php namespace ProjectHandler;
include_once("Config.php");
require $autoload;
class Hello {
public function world() {
echo "Hello world!";
}
}
?>
composer.json
{
"autoload": {
"psr-4": {
"Project\": "src"
}
}
}
http://127.0.1.1/project/src/Router.php
:
致命错误:未被发现的错误:类'Project Router Hello'在/path/path/to/project/src/src/router.php:38(无实际行)stack跟踪:#0 {main}路径/to/project/src/router.php在第38行(不是实际行)
我能够使用外国依赖项,因此我的一般作曲家设置似乎还可以。我只是无法弄清楚自己在自己的名称空间上搞砸了。
您似乎正在误解PSR4的工作方式。
"autoload": {
"psr-4": {
"Project\": "src"
}
}
此配置意味着如果您从自动加载器请求类项目 Handler Hello,它将检查路径srcHandlerHello.php
(这不存在。)
如果将目录结构更改为以下内容,则可以使用:
└── src
├── Config.php
├── Router.php
└── Handler
└── Hello.php (renamed from Handler.php)
另外,config.php或router.php都不包含类,它打败了使用类自动加载器的点。
请阅读:http://www.php-fig.org/psr/psr-4/