Composer autoload classmap with key value for class name with non-matching filename
Composer autoload classmap with key value for class name with non-matching filename
由于遗留问题,我有一个带有自动加载器的 CMS。 Composer 加入了管理一些依赖项以简化支付集成的聚会。但是,我发现这两个自动加载器相互冲突。然后我发现我可以在 composer.json 中使用 classmap
,但这似乎无法解决我的问题 - 找不到请求的 class。
例如,我有一个 MySQL
class,它位于一个名为 Database.php
的文件中。使用 classmap 到目前为止,当我在其中输入 Database.php
的文件路径时,我无法正确加载 MySQL
class。但是,使用 files
容器它可以工作。但是,如果可能的话,我想防止暴力包含每个页面请求的所有遗留 classes。
我想知道是否可以为类似 classmap
的行为定义键值映射。从而定义我的 composer.json 类似:
{
"require" : {
"vendor/payment-service-provider-package": "version-data"
},
"autoload": {
"classmap": [
"MySQL" => "./CMS/Classes/Database.php",
"..." => "./CMS/Classes/....php"
]
}
}
您只需声明声明 classes 的文件,生成的 自动加载程序将创建必要的“键值”映射。
例如我在 lib/
上有几个声明 classes 将在 PSR-4 之外的文件:
FooBar.php
声明 \Foo
和 \Bar
.
FizzBuzz.php
声明 \Extra\Fizz
和 \Extra\Buzz
.
此外,在 src/
内,我有其余的 classes,遵循 PSR-4 标准。
为了在自动加载时包含所有这些 classes,我简单地声明:
{
"autoload": {
"psr-4": {
"App\": "src"
},
"classmap": [
"lib/"
]
}
}
在 运行 composer dump-autoload
之后,composer 将扫描这些目录并在 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',
);
... 包括所有必要的信息,以了解每个“未找到”需要读取哪个文件 class。
由于遗留问题,我有一个带有自动加载器的 CMS。 Composer 加入了管理一些依赖项以简化支付集成的聚会。但是,我发现这两个自动加载器相互冲突。然后我发现我可以在 composer.json 中使用 classmap
,但这似乎无法解决我的问题 - 找不到请求的 class。
例如,我有一个 MySQL
class,它位于一个名为 Database.php
的文件中。使用 classmap 到目前为止,当我在其中输入 Database.php
的文件路径时,我无法正确加载 MySQL
class。但是,使用 files
容器它可以工作。但是,如果可能的话,我想防止暴力包含每个页面请求的所有遗留 classes。
我想知道是否可以为类似 classmap
的行为定义键值映射。从而定义我的 composer.json 类似:
{
"require" : {
"vendor/payment-service-provider-package": "version-data"
},
"autoload": {
"classmap": [
"MySQL" => "./CMS/Classes/Database.php",
"..." => "./CMS/Classes/....php"
]
}
}
您只需声明声明 classes 的文件,生成的 自动加载程序将创建必要的“键值”映射。
例如我在 lib/
上有几个声明 classes 将在 PSR-4 之外的文件:
FooBar.php
声明\Foo
和\Bar
.FizzBuzz.php
声明\Extra\Fizz
和\Extra\Buzz
.
此外,在 src/
内,我有其余的 classes,遵循 PSR-4 标准。
为了在自动加载时包含所有这些 classes,我简单地声明:
{
"autoload": {
"psr-4": {
"App\": "src"
},
"classmap": [
"lib/"
]
}
}
在 运行 composer dump-autoload
之后,composer 将扫描这些目录并在 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',
);
... 包括所有必要的信息,以了解每个“未找到”需要读取哪个文件 class。