自动加载嵌套文件?

Autoloading nested files?

在我的 Laravel 包中,我在 /src/Models/Traits 下有一些模型特征。

src 文件夹自动加载到 composer.json:

"autoload": {
        "psr-4": {
            "Acme\Package\": "src"
            ......

因此 src 下的任何文件都可以通过以下方式在包父应用程序中使用:

use Acme\Package\SomeHelper;

有没有办法将我的特征保持在 /src/Models/Traits 之下,但让它们在父应用程序中可访问,例如:

use Acme\Package\SomeTrait;

documentation for Composer 包含此语句:

If you need to search for a same prefix in multiple directories, you can specify them as an array

因此在您的示例中,您可以指定两个目录进行搜索,如下所示:

{
    "autoload": {
        "psr-4": { 
             "Acme\Package\": ["src", "src/Models/Traits"]
        }
    }
}

顺便说一句,如果不清楚,use 语句和自动加载是不相关的功能。 use 语句允许在 run-time 处触发 aliasing/importing a namespaced name within a particular file, and is processed as a string replacement by the compiler without any reference to the class or trait definition. The autoloader 当 class、接口或特征被引用但尚未定义时。 use 语句本身不会触发自动加载器。