Skip to content

Instantly share code, notes, and snippets.

@tvlooy
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tvlooy/8982588 to your computer and use it in GitHub Desktop.
Save tvlooy/8982588 to your computer and use it in GitHub Desktop.
<?php
/* Configure parameters and service in config.yml:
*
* imports:
* - { resource: parameters.extras.yml }
*
* services:
* dynamic.parameters:
* class: Ctors\MyBundle\Util\DynamicParameters
* arguments: [ '%kernel.root_dir%', 'parameters.extras.yml' ]
*
* Use a parameter (eg: in Controller):
*
* $this->container->getParameter('something.active');
*
* Change a parameter (eg: from Controller):
*
* $dynamicParameters = $this->container->get('dynamic.parameters');
* $parameters = $dynamicParameters->getParameters();
* $parameters['parameters']['something.active'] = 'Off';
* $dynamicParameters->saveParameters($parameters);
*
* Just use '%something.active%' in config.yml for configuring other services.
*/
namespace Ctors\MyBundle\Util;
use Symfony\Component\Yaml\Dumper,
Symfony\Component\Yaml\Parser;
class DynamicParameters
{
private $file;
private $parameters;
public function __construct($rootDir, $filename)
{
$this->file = "{$rootDir}/config/{$filename}";
$this->ensureDefaults();
}
private function ensureDefaults()
{
if (file_exists($this->file) === false) {
$this->saveParameters(
array(
'parameters' => array(
'something.active' => 'On'
)
)
);
}
}
/**
* @return array
*/
public function getParameters()
{
$parser = new Parser();
$yaml = file_get_contents($this->file);
return $parser->parse($yaml);
}
/**
* @param array $parameters
*/
public function saveParameters($parameters)
{
$dumper = new Dumper();
$yaml = $dumper->dump($parameters);
file_put_contents($this->file, $yaml);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment