致命错误:未捕获错误:类'项目\路由器\ Hello'找不到

时间:2016-06-20 16:11:17

标签: php namespaces composer-php autoload

这是我第一次使用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设置似乎没问题。我无法弄清楚我在哪里搞砸了自己的名字空间。

1 个答案:

答案 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都不包含类,这使得使用类自动加载器失败了。

请阅读:http://www.php-fig.org/psr/psr-4/