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