可能是一些微不足道的事情,但我在基本自动加载方面遇到了问题。我想创建沙箱项目只是为了测试新的解决方案,所以我创建了以下结构:
Sandbox
|- index.php
|- composer.json
|- vendor
| |- {autogenerated content}
|- src
|- Working.php
文件
composer.json
看起来像这样:
{
"name": "vendor/sandbox",
"authors": [
{
"name": "foo",
"email": "[email protected]"
}
],
"require": {
"phpunit/phpunit": "dev-master",
"phpunit/phpunit-mock-objects": "dev-master"
},
"psr-4": {
"Sandbox\\": "src/"
}
}
当然,我在更改后运行了
composer.update
。然后我写了一个Working.php
的琐碎正文:
<?php
namespace Sandbox;
class Working
{
public function __construct() {
echo "Hello World";
}
}
当然还有
index.php
:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Sandbox\Working;
new Working();
?>
我检查了这些文件的权限只是为了确定,但是当我尝试运行时我得到了
PHP Fatal error: Class 'Sandbox\Working' not found in /var/www/Sandbox/index.php on line 6
我意识到这可能是一件微不足道的事情,但这里可能出了什么问题?
您的
composer.json
缺少 autoload
键。
应该是这样的
"autoload": {
"psr-4": {
"Sandbox\\": "src/"
}
}
我相信
"psr-4": {
"Sandbox\\": "src/"
}
应该是:
"autoload": {
"psr-4": {
"Sandbox\\": "src/"
}
所以你的文件将是:
{
"name": "vendor/sandbox",
"authors": [
{
"name": "foo",
"email": "[email protected]"
}
],
"require": {
"phpunit/phpunit": "dev-master",
"phpunit/phpunit-mock-objects": "dev-master"
},
"autoload": {
"psr-4": {
"Sandbox\\": "src/"
}
}
}