summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2017-07-20 02:22:18 +0200
committerIgor Scheller <igor.scheller@igorshp.de>2017-07-20 02:30:53 +0200
commite1762e7764d4ee4f37757ecd2630f62a440dbf0e (patch)
treeab10822d61e7a2549be99bf2e7964351ddda484b /src
parentd4ad70804be9d310787b98fcdce51b3697967d22 (diff)
replaced template_render with dynamic renderer class
Diffstat (limited to 'src')
-rw-r--r--src/Renderer/EngineInterface.php21
-rw-r--r--src/Renderer/HtmlEngine.php34
-rw-r--r--src/Renderer/Renderer.php62
-rw-r--r--src/helpers.php17
4 files changed, 134 insertions, 0 deletions
diff --git a/src/Renderer/EngineInterface.php b/src/Renderer/EngineInterface.php
new file mode 100644
index 00000000..ca468db5
--- /dev/null
+++ b/src/Renderer/EngineInterface.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+interface EngineInterface
+{
+ /**
+ * Render a template
+ *
+ * @param string $path
+ * @param mixed[] $data
+ * @return string
+ */
+ public function get($path, $data = []);
+
+ /**
+ * @param string $path
+ * @return bool
+ */
+ public function canRender($path);
+}
diff --git a/src/Renderer/HtmlEngine.php b/src/Renderer/HtmlEngine.php
new file mode 100644
index 00000000..4a48e1f0
--- /dev/null
+++ b/src/Renderer/HtmlEngine.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+class HtmlEngine implements EngineInterface
+{
+ /**
+ * Render a template
+ *
+ * @param string $path
+ * @param mixed[] $data
+ * @return string
+ */
+ public function get($path, $data = [])
+ {
+ $template = file_get_contents($path);
+ if (is_array($data)) {
+ foreach ($data as $name => $content) {
+ $template = str_replace('%' . $name . '%', $content, $template);
+ }
+ }
+
+ return $template;
+ }
+
+ /**
+ * @param string $path
+ * @return bool
+ */
+ public function canRender($path)
+ {
+ return strpos($path, '.html') && file_exists($path);
+ }
+}
diff --git a/src/Renderer/Renderer.php b/src/Renderer/Renderer.php
new file mode 100644
index 00000000..bf3d5609
--- /dev/null
+++ b/src/Renderer/Renderer.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+use ErrorException;
+
+class Renderer
+{
+ /** @var self */
+ protected static $instance;
+
+ /** @var EngineInterface[] */
+ protected $renderer = [];
+
+ /**
+ * Render a template
+ *
+ * @param string $template
+ * @param mixed[] $data
+ * @return string
+ */
+ public function render($template, $data = [])
+ {
+ foreach ($this->renderer as $renderer) {
+ if (!$renderer->canRender($template)) {
+ continue;
+ }
+
+ return $renderer->get($template, $data);
+ }
+
+ engelsystem_error('Unable to find a renderer for template file &laquo;' . $template . '&raquo;.');
+ return '';
+ }
+
+ /**
+ * Add a new renderer engine
+ *
+ * @param EngineInterface $renderer
+ */
+ public function addRenderer(EngineInterface $renderer)
+ {
+ $this->renderer[] = $renderer;
+ }
+
+ /**
+ * @return self
+ * @throws ErrorException
+ */
+ public static function getInstance()
+ {
+ return self::$instance;
+ }
+
+ /**
+ * @param self $instance
+ */
+ public static function setInstance($instance)
+ {
+ self::$instance = $instance;
+ }
+}
diff --git a/src/helpers.php b/src/helpers.php
index a410b27e..d44d1d21 100644
--- a/src/helpers.php
+++ b/src/helpers.php
@@ -3,6 +3,7 @@
use Engelsystem\Config\Config;
use Engelsystem\Http\Request;
+use Engelsystem\Renderer\Renderer;
/**
* Get or set config values
@@ -39,3 +40,19 @@ function request($key = null, $default = null)
return $request->input($key, $default);
}
+
+/**
+ * @param string $template
+ * @param mixed[] $data
+ * @return Renderer|string
+ */
+function view($template = null, $data = null)
+{
+ $renderer = Renderer::getInstance();
+
+ if (is_null($template)) {
+ return $renderer;
+ }
+
+ return $renderer->render($template, $data);
+}