Symfony yaml配置:执行普通php代码
Symfony框架4.4 这是我的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
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);
}
}