由于遗留问题,我有一个带有自己的自动加载器的CMS。Compsoser加入该党是为了管理一些依赖关系,以简化支付集成。但是,我发现两个自动加载器相互冲突。然后我发现我可以在 composer.json 中使用classmap
,但这似乎并不能解决我的问题 - 找不到请求的类。
例如,我有一个MySQL
类,它驻留在一个名为Database.php
的文件中。到目前为止,使用类映射,当我输入要在其中Database.php
的文件路径时,我无法正确加载MySQL
类。但是,使用files
容器它可以工作。但是,如果可能的话,我想防止暴力破解包括每个页面请求的所有遗留类。
我想知道是否有可能为类似classmap
的行为定义键值映射。从而定义我的 composer.json 如下:
{
"require" : {
"vendor/payment-service-provider-package": "version-data"
},
"autoload": {
"classmap": [
"MySQL" => "./CMS/Classes/Database.php",
"..." => "./CMS/Classes/....php"
]
}
}
你只需要声明声明类的文件,生成的自动加载器将创建必要的"键值"映射。
例如,我lib/
有几个文件声明类将在PSR-4之外:
FooBar.php
声明Foo
和Bar
.FizzBuzz.php
宣布ExtraFizz
和ExtraBuzz
.
此外,在src/
内,我有其余的课程,遵循PSR-4标准。
为了在自动加载中包含所有这些类,我只需声明:
{
"autoload": {
"psr-4": {
"App\": "src"
},
"classmap": [
"lib/"
]
}
}
运行composer dump-autoload
后,作曲家将扫描这些目录,vendor/composer/autoload_classmap.php
我会得到:
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Bar' => $baseDir . '/lib/FooBar.php',
'Composer\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'Extra\Buzz' => $baseDir . '/lib/FizzBuzz.php',
'Extra\Fizz' => $baseDir . '/lib/FizzBuzz.php',
'Foo' => $baseDir . '/lib/FooBar.php',
);
。这包括所有必要的信息,以了解每个"未找到"类需要读取哪个文件。