Symfony yaml配置:执行普通php代码

Symfony yaml配置:执行普通php代码,symfony,Symfony,Symfony框架4.4 这是我的config/services.yaml文件: parameters: ... app.dogstatsd.config: host: 'some_host_name.domain.com' global_tags: node: 'hostname' env: '%env(APP_ENV)%' services: ... DataDog\DogSta

Symfony框架4.4

这是我的
config/services.yaml
文件:

parameters:
    ...
    app.dogstatsd.config:
        host: 'some_host_name.domain.com'
        global_tags:
            node: 'hostname'
            env: '%env(APP_ENV)%'

services:
    ...
    DataDog\DogStatsd:
        arguments: ['%app.dogstatsd.config%']


我需要
节点
等于PHP gethostname()函数结果

在服务器端::

$ hostname
homestead
那么,如何从yaml配置中获取主机名值呢

我找到了解决办法:

    env(HOSTNAME): '../config/.runtime-evaluated.php'
    app.dogstatsd.config:
        host: 'some_host_name.domain.com'
        global_tags:
            node: '%env(require:HOSTNAME)%'
            env: '%env(APP_ENV)%'
在哪里

$cat config/.runtime evaluated.php'
编辑:你在hingsight上所做的实际上是很好的。我想经过深思熟虑,这绝对没问题。无论如何,我会在下面留下我的评论。
我不喜欢您试图将完整配置注入服务。既然你说它是可变的,为什么还要麻烦呢。。但是为了争论,让我们说你必须。。。。在这一点上,您试图做的可能是创建DependencyInjection扩展,它允许您扩展另一个bundles配置选项的值

也许可以在这里看一下:

例如,您可以创建一个文件。。选择您自己的命名和首选捆绑包以将其添加到

//src/AppDDoggerBundle/DI/DDWhateverYouWantToCallMeExtension.php

public function prepend(ContainerBundle $container){
   // Get existing DD Bundle Config.. 
   // (I don't know what the Bundle Alias is called)
   $container->loadFromExtension('ddstat', [
      'key' => 'value'
   ]);
   
}
使用一个帮助器服务来访问DDStatt不是更有意义吗

例如

<?php

/**
 * Created by Helpful Stackoverflow User.
 * User: layke
 * Date: 02/12/20
 * Time: 22:17.
 */

namespace App\DataDogBundle\Service;

    use DataDog\DogStatsd;

    /**
     * Class DDStatter.
     *
     * @method timing(string $stat, float $time, float $sampleRate, array | string $tags)
     * @method microtiming(string $stat, float $time, float $sampleRate, array | string $tags)
     * @method gauge(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method histogram(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method distribution(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method set(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method increment(string | array $stat, float $sampleRate, array | string $tags, float $value)
     * @method decrement(string | array $stat, float $sampleRate, array | string $tags, float $value)
     * @method updateStats(string | array $stat, int $delta, float $sampleRate, array | string $tags)
     * @method serialize_tags(array | string $tags)
     * @method normalize_tags(mixed $tags)
     * @method send(array $data, float $sampleRate, array | string $tags)
     */
    class DDStatter
    {
        private $statd;

        /**
         * DDStatter constructor.
         */
        public function __construct(?string $dataDogApiKey, ?string $dataDogAppKey)
        {
            $this->statd = new DogStatsd([
                'api_key' => $dataDogApiKey,
                'app_key' => $dataDogAppKey,
            ]);
        }

        public function __call($method, $args)
        {
            return call_user_func_array([$this->statd, $method], $args);
        }
    }

感谢您的回复。您的解决方案也相当麻烦,我对这种情况感到惊讶。
<?php

/**
 * Created by Helpful Stackoverflow User.
 * User: layke
 * Date: 02/12/20
 * Time: 22:17.
 */

namespace App\DataDogBundle\Service;

    use DataDog\DogStatsd;

    /**
     * Class DDStatter.
     *
     * @method timing(string $stat, float $time, float $sampleRate, array | string $tags)
     * @method microtiming(string $stat, float $time, float $sampleRate, array | string $tags)
     * @method gauge(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method histogram(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method distribution(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method set(string $stat, float $value, float $sampleRate, array | string $tags)
     * @method increment(string | array $stat, float $sampleRate, array | string $tags, float $value)
     * @method decrement(string | array $stat, float $sampleRate, array | string $tags, float $value)
     * @method updateStats(string | array $stat, int $delta, float $sampleRate, array | string $tags)
     * @method serialize_tags(array | string $tags)
     * @method normalize_tags(mixed $tags)
     * @method send(array $data, float $sampleRate, array | string $tags)
     */
    class DDStatter
    {
        private $statd;

        /**
         * DDStatter constructor.
         */
        public function __construct(?string $dataDogApiKey, ?string $dataDogAppKey)
        {
            $this->statd = new DogStatsd([
                'api_key' => $dataDogApiKey,
                'app_key' => $dataDogAppKey,
            ]);
        }

        public function __call($method, $args)
        {
            return call_user_func_array([$this->statd, $method], $args);
        }
    }