Неустранимая ошибка: Не удалось Ошибка: класс 'Project \ Router \ Hello' не найден

Это мой первый раз, когда я использовал 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 :

Неустранимая ошибка: Не удалось Ошибка: класс 'Project \ Router \ Hello' не найден в /path/to/project/src/Router.php:38(not фактической строке) Трассировка стека: # 0 {main} throw in / path / to /project/src/Router.php в строке 38 (не фактическая строка)

Я могу использовать внешние зависимости, поэтому моя общая настройка Composer выглядит нормально. Я просто не могу понять, где я навожу свои собственные пространства имен.

Кажется, вы неправильно понимаете, как работает 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 не содержат классов, которые поражают точку использования автозагрузчика класса.

Дайте это прочитать: http://www.php-fig.org/psr/psr-4/