使用 PSR4 自动加载作曲家

问题描述 投票:0回答:2

可能是一些微不足道的事情,但我在基本自动加载方面遇到了问题。我想创建沙箱项目只是为了测试新的解决方案,所以我创建了以下结构:

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

我意识到这可能是一件微不足道的事情,但这里可能出了什么问题?

php composer-php autoload psr-4
2个回答
2
投票

您的

composer.json
缺少
autoload
键。 应该是这样的

"autoload": {
    "psr-4": {
        "Sandbox\\": "src/"
    }
}

1
投票

我相信

"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/"
        }          
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.