我尝试使用位于vendor/autoload.php
的Composer自动加载器。但是,我似乎无法弄清楚如何到达项目的根目录,然后我可以从中导航到vendor/autoload.php
。我必须在每个文件中指定相对路径(即../../../vendor/autoload.php
)。这似乎是一种非常讨厌的自动加载器方式,因为根据文件的深度,这条路径会有所不同。
有没有办法在没有指定相对路径的情况下到达根目录,或者我是否需要在每个文件中找到x个父目录?
答案 0 :(得分:3)
PHP无法知道项目的根源是什么"是。您可以在磁盘上拥有任意数量的目录,其中包含几个名为vendor/autoload.php
的文件,只有您知道"项目根目录"的特殊之处。所以最终,答案是否定的,没有办法。
但请注意,您只需将自动加载器包含在文件中,这些文件本身不包含在内或自动加载。自动加载器是您加载一次的一部分,作为代码配置/引导的一部分,然后它会加载它们所需的任何类别。
因此,限制不同级别的混乱的方法是仔细构建您的项目。例如:
同样的原则适用于在命令行脚本或任何其他类型的应用程序中使用:限制或构建"入口点",因为只有那些需要知道加载自动加载器的位置。
如果您已经在每个请求/脚本运行/单元测试/等上加载了某种配置文件,那么将require_once 'vendor/autoload.php';
行放在那里可能是明智的。与配置一样,自动加载器是"全局状态"你只想设置一次然后忘记。