编写器自动加载类映射,其中包含文件名不匹配的类名的键值



由于遗留问题,我有一个带有自己的自动加载器的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声明FooBar.
  • FizzBuzz.php宣布ExtraFizzExtraBuzz.

此外,在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',
);

。这包括所有必要的信息,以了解每个"未找到"类需要读取哪个文件。

相关内容

  • 没有找到相关文章

最新更新