Composer autoload - 如何从不同的文件夹中获取类、特征、接口?

Composer autoload - How to fetch classes, traits, interfaces from different folders?

如何使用 composer autoload 从不同的文件夹中获取类、特征、接口?

其中一些我使用命名空间,例如,

controller/Foo.php,

namespace MyNamespace;
class Foo
{
    public $message = 'hello Foo';
}

model/Boo.php

namespace MyNamespace;
class Boo
{
    public $message = 'hello Boo';
}

index.php,

// Composer.
require 'vendor/autoload.php';

use \MyNamespace\Foo;
$Foo = new Foo();
var_dump($Foo);

错误,

Fatal error: Class 'MyNamespace\Foo' not found in C:...

composer.json,

{
    "autoload": {
        "psr-0": {
            "": "ext/",
            "": "controller/",
            "": "model/" 
        }
    }
}

我在许多不同的文件夹中有很多类(它可能会扩展),那么当我在一个新文件夹中有新类时,有什么方法可以无需重新安装 作曲家自动加载吗?

您必须标准化您的命名空间和文件夹结构。如果您在不同的文件夹中有相同的命名空间,则很难创建一个简单的逻辑来自动加载它们。尝试在您的命名空间中使用另一个段,例如:

namespace MyNamespace\Controller;
class Foo
{
    public $message = 'hello Foo';
}

和:

namespace MyNamespace\Model;
class Boo
{
    public $message = 'hello Boo';
}

在你的 composer.json:

{
    //..
    "autoload": {
        "psr-4": {
             "MyNamespace\Model\": "/path/to/model/folder/",
             "MyNamespace\Controller\": "/path/to/controller/folder/"
        }
    }
}

设置完成后,调用:

composer dump-autoload