此配置文件来自 Symfony 6.4 应用程序:
<?php
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
return static function (ContainerConfigurator $containerConfig): void {
$scrapePatterns = [
'default' => [
'regex' => '/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/i',
'first_only' => false,
'cancel' => false,
],
];
$templates = [
'header' => 'Some header',
'footer' => 'Some footer',
];
$containerConfig->parameters()->set(
'my.sample_configs',
[
'scrape_patterns' => $scrapePatterns,
'templates' => $templates,
]
);
};
如何从根本不使用 Symfony 的不同 PHP 应用程序读取这些定义数组?
我没有
ContainerConfigurator
类...我想知道是否可以使用该名称创建自己的类并使用它来获取值。
关于我的(诚然是hacky)问题的一些注释:
return static function
,所以我很难知道如何调用它,甚至不知道它的限制用这段代码就可以完成。我认为它已经完成了here,尽管我不确定。在了解 Symfony 是如何运行该函数之后,我能够回答我自己的问题。没有我想象的那么难...
我像这样更改代码:
<?php
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
return static function (ContainerConfigurator $containerConfig = null): array {
$scrapePatterns = [
'default' => [
'regex' => '/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/i',
'first_only' => false,
'cancel' => false,
],
];
$templates = [
'header' => 'Some header',
'footer' => 'Some footer',
];
$configs = [
'scrape_patterns' => $scrapePatterns,
'templates' => $templates,
];
if ($containerConfig) {
$containerConfig->parameters()->set('my.sample_configs', $configs);
}
return $configs;
};
变化是:
$containerConfig
是否存在(从Symfony调用时存在,从其他地方调用时不存在)那么我在另一个应用程序上的代码只需要这个:
$fn = include 'path/to/the/symfony/configs/processor_configs.php';
if ($fn)
$ret = $fn();
这样我就可以在我的应用程序上获取数组,并且 Symfony 也能够成功加载相同的配置文件。