我尝试使用PSR-0自动加载文件,但它不会自动加载该文件。我尝试使用PSR-4自动加载相同的文件。使用PSR-4,它工作得很好。 PSR-0所需的文件夹结构有什么不同吗?
即使保留What is the difference between PSR-0 and PSR-4?
中提到的文件夹结构,我也无法使PSR-0正常工作这是我的文件夹结构。
Test
--Package
--Test.php
我在Test.php
:
<?php
namespace Test\Package;
class Test
{
public function __construct()
{
echo "In Test class";
}
}
和composer.json
看起来像
{
"autoload": {
"psr-0": {
"Test\\Package\\": "Test/Package/"
}
}
}
答案 0 :(得分:1)
与直觉相反,the composer documentation on PSR-0包含一个部分路径,使PSR-0看起来需要一个路径来加载类。实际上,PSR-0基于包构建路径,因此如果代码位于{em> not 之类的src/
或lib/
文件夹内,则只需要指定路径命名空间路径的一部分。如果基于名称空间的目录结构在与composer.json
相同的目录中启动,则不需要路径。
假设问题中指定了目录结构,可以使用composer加载此类的几种方法。
{
"autoload": {
"psr-0": { "Test\\Package\\": "" }
}
}
请注意,即使代码位于Test/Package/
,此文件夹在PSR-0中也未指定 。
对于PSR-4自动加载,包源的路径必须出现在composer.json
文件中。
{
"autoload": {
"psr-4": { "Test\\Package\\": "Test/Package/" }
}
}
如果存在加载未组织到典型命名空间文件夹树中的类的要求,则还可以使用classmap
数组简单地指定要在其中搜索类的文件夹列表。
{
"autoload": {
"classmap": [ "Test/Package/" ]
}
}
但是,一般情况下,使用PSR-0或PSR-4会提供更简单的体验,因为classmap
方法需要单独指定每个文件夹。