Php 作曲家没有';自动加载软件包
我目前正在开发一个框架,但我不知道如何设置自动加载。首先,我用sample类和composer.json创建了一个包。我通过以下方式自动加载了该示例类:Php 作曲家没有';自动加载软件包,php,frameworks,composer-php,autoload,Php,Frameworks,Composer Php,Autoload,我目前正在开发一个框架,但我不知道如何设置自动加载。首先,我用sample类和composer.json创建了一个包。我通过以下方式自动加载了该示例类: "autoload": { "classmap": [ "libs/" ] } 我已经检查了/vendor/mypackage/vendor/composer/autoload_classmap.php,并确认包的自动加载器工作正常。但问题是我无法从主应用程序访问该包的类,除非我直接包含该包的autoload.ph
"autoload": {
"classmap": [
"libs/"
]
}
我已经检查了/vendor/mypackage/vendor/composer/autoload_classmap.php,并确认包的自动加载器工作正常。但问题是我无法从主应用程序访问该包的类,除非我直接包含该包的autoload.php
更新
/vendor/foo/mypackage/composer.json
"autoload": {
"psr-4": {
"Http\\": "libs/"
}
}
/vendor/foo/mypackage/libs/Request.php
namespace Http;
class Request {}
首先,通常最好使用
psr-0
或psr-4
自动加载配置。使用类映射,每次添加新类或重命名一个类时,都必须重复自动加载程序
您始终需要使用
require'vendor/autoload.php'包含Composer autoloader代码>。添加这样的require语句的最佳位置是在前端控制器文件中。我自己解决了这个问题。每当我更改pacakge的composer.json时,我都必须重新安装这个包。我在mvc框架中使用了psr-4,但它对我的composer包不起作用。我还包括/vendor/autoload.php,但如果不包括/vendor/MyPackage/vendor/autoload.php,我就不能使用MyPackage\SampleClass。是不是/vendor/autoload.php也不应该包括包的自动加载器?我必须一个接一个地包含所有包自动加载器吗?为什么在mypackage
目录中有vendor
目录?如果您需要带Composer的软件包,所有依赖项都将安装在rootvendor/
目录中,所有自动加载都将设置在rootvendor/autoload.php
中。有一个vendor文件夹,因为我以前在/vendor/mypackage中运行dump autoload命令,但后来我知道这不是必需的。我已经更新了我的问题。我这样调用我的类:new\Http\Request()
。我没有发现我的代码有任何错误。如果你在2019年来到这里,你所需要做的就是composer dumpautoload