从文件中获取 Symfony 配置而不使用 Symfony

问题描述 投票:0回答:1

此配置文件来自 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)问题的一些注释:

  • 我并不是在寻找解释解决问题的更好方法的答案,尽管我完全理解它们的存在;我对此处描述的实际黑客挑战更感兴趣。
  • 只要真正的 Symfony 应用程序仍然能够正确加载它,我就可以对 Symfony 配置文件进行更改。
  • 令我困惑的一件事是,由于我的技术限制,我不明白 Symfony 如何使用它
    return static function
    ,所以我很难知道如何调用它,甚至不知道它的限制用这段代码就可以完成。我认为它已经完成了here,尽管我不确定。
php symfony
1个回答
0
投票

在了解 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;
};

变化是:

  • 允许函数参数缺失(null)
  • 返回一个数组而不是void
  • 使用前检查
    $containerConfig
    是否存在(从Symfony调用时存在,从其他地方调用时不存在)
  • 返回我想要的数组(Symfony 似乎没有任何问题)

那么我在另一个应用程序上的代码只需要这个:


   $fn = include 'path/to/the/symfony/configs/processor_configs.php';

   if ($fn)
      $ret = $fn();

这样我就可以在我的应用程序上获取数组,并且 Symfony 也能够成功加载相同的配置文件。

© www.soinside.com 2019 - 2024. All rights reserved.