Fatal error: Uncaught Error: Class 'Project\Router\Hello' not found
Fatal error: Uncaught Error: Class 'Project\Router\Hello' not found
这是我第一次使用 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
:
Fatal error: Uncaught Error: Class 'Project\Router\Hello' not found in /path/to/project/src/Router.php:38(not actual line) Stack trace: #0 {main} thrown in /path/to/project/src/Router.php on line 38(not actual line)
我能够使用外部依赖项,所以我的一般 Composer 设置似乎没问题。我只是不知道我在自己的命名空间上搞砸了哪里。
您似乎误解了 PSR4 的工作原理。
"autoload": {
"psr-4": {
"Project\": "src"
}
}
此配置意味着如果您从自动加载器请求 class Project\Handler\Hello,它将检查路径 src\Handler\Hello.php
(不存在。)
如果您将目录结构更改为以下内容,它将起作用:
└── src
├── Config.php
├── Router.php
└── Handler
└── Hello.php (renamed from Handler.php)
此外,Config.php 或 Router.php 都不包含 classes,这违背了使用 class 自动加载器的意义。
这是我第一次使用 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
:
Fatal error: Uncaught Error: Class 'Project\Router\Hello' not found in /path/to/project/src/Router.php:38(not actual line) Stack trace: #0 {main} thrown in /path/to/project/src/Router.php on line 38(not actual line)
我能够使用外部依赖项,所以我的一般 Composer 设置似乎没问题。我只是不知道我在自己的命名空间上搞砸了哪里。
您似乎误解了 PSR4 的工作原理。
"autoload": {
"psr-4": {
"Project\": "src"
}
}
此配置意味着如果您从自动加载器请求 class Project\Handler\Hello,它将检查路径 src\Handler\Hello.php
(不存在。)
如果您将目录结构更改为以下内容,它将起作用:
└── src
├── Config.php
├── Router.php
└── Handler
└── Hello.php (renamed from Handler.php)
此外,Config.php 或 Router.php 都不包含 classes,这违背了使用 class 自动加载器的意义。