这是我第一次使用Composer,而且我试图弄清楚为什么它没有拿起我的命名空间。
在我的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 Project\Router;
include_once("Config.php");
require $autoload;
use Project\Handler;
Hello::world();
?>
的src / Handler.php
<?php namespace Project\Handler;
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
:
致命错误:未捕获错误:类&#39;项目\路由器\ Hello&#39;找不到/path/to/project/src/Router.php:38(不是实际行)堆栈跟踪:#0 {main}在第38行的/path/to/project/src/Router.php中抛出(不是实际的)线)
我可以使用外部依赖项,因此我的常规Composer设置似乎没问题。我无法弄清楚我在哪里搞砸了自己的名字空间。
答案 0 :(得分:1)
您似乎误解了PSR4的工作原理。
"autoload": {
"psr-4": {
"Project\\": "src"
}
}
此配置意味着如果您从自动加载器请求类Project \ Handler \ Hello,它将检查路径src\Handler\Hello.php
(它不存在。)
如果您将目录结构更改为以下内容,它将起作用:
└── src
├── Config.php
├── Router.php
└── Handler
└── Hello.php (renamed from Handler.php)
此外,Config.php或Router.php都不包含类,这使得使用类自动加载器失败了。