在services.yml文件中自动写入

时间:2016-02-16 10:10:44

标签: symfony symfony-2.8

我想创建一个php类,它根据我的实体(在服务器上运行或使用命令)自动写入services.yml文件中的服务。是否可以这样做或者我应该只使用文件系统来做它?

1 个答案:

答案 0 :(得分:1)

您可以,但在下一次请求之前,新创建的服务将无法使用。

要检索捆绑包的services.yml

// src/AcmeBundle/Controller/DefaultController.php

$kernel = $this->get('kernel');
$servicesPath = $kernel->locateResource('@AcmeBundle/Resources/config/services.yml');`

或您应用的全局services.yml

$servicesPath = $kernel->getRootDir().'/config/services.yml';``

将您的新服务写入:

$parser = new \Symfony\Component\Yaml\Parser();
$dumper = nrw \Symfony\Component\Yaml\Dumper();

// Get the services already configured, use the path of 'services.yml' retrieved from bundle/application
$oldServices = $parser->parse($servicesPath); 
$newService = array('your_service_name' => array( 
   // Here your arguments, tags, ...
);

$mergedServices = array_merge($oldServices, $newService);
$yamlServices = $dumper->dump($mergedServices);

// Write all in the configuration file
file_put_contents($servicesPath, $yamlServices); // $services is the 'services.yml' path