Composer 自动加载几个路径作为一个命名空间
Posted
技术标签:
【中文标题】Composer 自动加载几个路径作为一个命名空间【英文标题】:Composer autoload few paths as one namespace 【发布时间】:2015-10-25 18:41:17 【问题描述】:我有这个文件夹结构:
core/
core/db/
core/db/beans
我在core/db/
和core/db/beans
中有namespace AAA\Core\DataBase;
的课程。
在我的 composer.json 文件中,我有:
"autoload":
"psr-4":
"AAA\\Core\\": "core/",
"AAA\\Core\\DataBase\\": "core/db/"
之后,我可以将core/
文件夹中的类与use AAA\Core\DataBase\ClassName;
一起使用,但不能使用core/db/beans
中的类。我收到“致命错误:找不到类”。如何将几个文件夹添加到同一个命名空间?有可能吗?
【问题讨论】:
【参考方案1】:按照 PSR-4 标准:
加载与完全限定类名对应的文件时
一个或多个前导命名空间和子命名空间名称的连续系列,不包括前导命名空间分隔符,在完全限定的类名(“命名空间前缀”)中对应于至少一个“基目录”。李> “命名空间前缀”之后的连续子命名空间名称对应于“基本目录”中的子目录,其中命名空间分隔符表示目录分隔符。子目录名称必须与子命名空间名称的大小写匹配。
因此,您的命名空间必须与您的文件夹结构相对应。
PSR-4 Standard
【讨论】:
那么,我不能将几个具有相同命名空间的类放到不同的文件夹中? 是的,您不能这样做,因为它违反了您用于自动装载机的 psr-4 标准。但是您总是可以编写自己的自动加载器,并将其与由 composer 生成的自动加载器一起注册。虽然我建议不要这样做,但手动自动加载可能会严重降低您的系统速度。 如果我正确阅读了 OP,问题是“我可以为单个命名空间定义多个根目录吗?”答案是“是的,你可以”。 Here is a more recent question with the correct solution。我意识到这个答案已经有 6 年历史了,所以当时这可能是不可能的......只是发表评论让未来的访问者知道这是可能的。以上是关于Composer 自动加载几个路径作为一个命名空间的主要内容,如果未能解决你的问题,请参考以下文章