diff --git a/Config.php b/Config.php index af4ce60667510a92132940b989c890efeba769ce..66c86277a5b2c2de93154668f34484427fa0aebe 100644 --- a/Config.php +++ b/Config.php @@ -4,6 +4,11 @@ namespace LakeDrops\Component\Composer; use LakeDrops\Component\Dotenv\Dotenv; use Symfony\Component\Yaml\Yaml; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Error\SyntaxError; +use Twig_Environment; +use Twig_Loader_Array; /** * Manages project config. @@ -17,6 +22,16 @@ final class Config { */ private $component; + /** + * @var \Twig_Loader_Array + */ + private $twig_loader; + + /** + * @var \Twig_Environment + */ + private $twig; + /** * Config constructor. * @@ -26,6 +41,9 @@ final class Config { */ public function __construct(string $component, array $default_values, Dotenv $env) { $this->component = $component; + $this->twig_loader = new Twig_Loader_Array([]); + $this->twig = new Twig_Environment($this->twig_loader); + $this->init(); $componentValues = self::$values[$component] ?? []; self::$values[$component] = $env->replaceEnvironmentVariables(NestedArray::mergeDeep($default_values, $componentValues)); @@ -50,7 +68,7 @@ final class Config { * * @return mixed|null */ - private function readValueFromArray($values, $keys) { + private function readValueFromArray(array $values, array $keys) { $key = array_shift($keys); if (!isset($values[$key])) { return NULL; @@ -72,4 +90,24 @@ final class Config { return $this->readValueFromArray(self::$values[$this->component], $parts); } + /** + * @param string $filename + * @param string $content + * + * @return string + */ + public function render(string $filename, string $content): string { + $this->twig_loader->setTemplate($filename, $content); + try { + return $this->twig->render($filename, self::$values[$this->component]); + } + catch (LoaderError $e) { + } + catch (RuntimeError $e) { + } + catch (SyntaxError $e) { + } + return ''; + } + } diff --git a/composer.json b/composer.json index a27d728e54f9d7ce96a522c773b2843db57be8b9..93ef3692f84b521514c708073b340f57778576bb 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "php": ">=7.2", "ext-json": "*", "lakedrops/dotenv": "^1.5||dev-master", - "symfony/yaml": "^3.4||^4.4||^5.0" + "symfony/yaml": "^3.4||^4.4||^5.0", + "twig/twig": "^1.44" }, "require-dev": { "composer/composer": "^1||^2",