我有一个关于重构遗留PHP应用程序以与PHP的PSR-4标准兼容的问题。我有一些类位于app/classes/文件夹,还没有适当的命名空间,我希望他们是自动加载直接当我调用作曲家的vendor/autolload .php。我根据<NamespaceName>(<SubNamespaceNames>)*<ClassName>
添加了一个名称空间,并尝试在composer的供应商文件夹下创建一个vendor/myapp/classes/src/
目录,并执行dump- autolload命令,但无济于事。类没有被加载,编曲者也不知道在哪里找到它。有什么建议吗?
谢谢,1月
注意事项:->我不想将源代码上传到任何可以像Packagist那样公开搜索的存储库,因为代码仅供内部使用。
编辑:这是我的composer.json:
...
"autoload":{
"psr-4": {
"Myapp\" : "Myapp"
}
},
...
但是现在结构看起来像:
->Myapp
-->Classes
--->Module1
---->submodule.php
--->Module2
---->submodule2.php
--->Module3
---->submodule3.php
--->Config
---->config.db.php
->vendor
-->autoload.php
这是我的问题/问题:
- 当我尝试加载submodule.php时,这反过来会加载submodule2.php和submodule3.php,它会告诉我submodule3.php找不到。submodule3.php的命名空间是MyappClassesModule3,但它说它没有找到。
- 我想包括强行,config.db.php,在每次调用autolload .php
我现在明白了。但是源文件不会驻留在/vendor文件夹中,这对我来说是可以的。如果你想让你的文件自动加载,无论在哪个文件夹,只要把它添加到psr-4块在作曲器。Json,如果还没有,就创建它。在我的作曲家。json中,顶层对象中有这个block,它添加了我想要自动加载的文件夹还包含了我想要包含的特定文件,比如配置文件
...
"autoload":{
"files": [
"somefolder/somefile.php"
],
"psr-4": {
"MyApp\" : "MyApp"
}
},
...
这意味着编译器应该自动加载位于MyApp目录下的文件,该目录的命名空间也为MyApp。
现在我的文件夹结构是这样的:
->MyApp
-->Classes
--->MyClass1.php --> namespace MyAppClasses classname: MyClass1
-->Components
--->MyClass2.php --> namespace MyAppClasses classname: MyClass2
->somefolder
-->somefile.php
->vendor
-->autoload.php
->index.php
如果我想把myclass1。php文件包含在index。php中,我只需要这样添加:
include_once( __DIR__ . "/vendor/autoload.php");
use MyAppClassesMyClass1;
$foo = new MyClass1();
$foo->bar();
希望能有所帮助。
您可以通过创建自己的编写器包,将其添加到您的私有git存储库中,然后将该包添加到项目的编写器中来实现这一点。json文件:
"require": {
"{your-vendor}/{package-name}": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:{your-vendor}/{package-name}.git"
}
],
完成后,运行composer update
.