1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118:
<?php
/**
* @author stev leibelt <artodeto@bazzline.net>
* @since 2015-10-01
*/
namespace Net\Bazzline\Component\Template;
use InvalidArgumentException;
use RuntimeException;
abstract class AbstractTemplate implements TemplateInterface
{
/** @var array */
private $variables;
/**
* @param array $variables
*/
public function __construct($variables = array())
{
$this->assignMany($variables, false);
}
/**
* @param array $variables
* @return string
*/
public function __invoke($variables = array())
{
$this->assignMany($variables);
return $this->render();
}
/**
* @param array $variables
* @param bool $mergeWithExisting
*/
public function assignMany(array $variables, $mergeWithExisting = true)
{
if ($mergeWithExisting) {
$this->variables = array_merge($this->variables, $variables);
} else {
$this->variables = $variables;
}
}
/**
* @param string $key
* @param mixed $value
*/
public function assignOne($key, $value)
{
$this->assignMany(array($key => $value));
}
/**
* @param string $key
* @return bool
*/
public function isAssigned($key)
{
return (isset($this->variables[$key]));
}
/**
* @return string
* @throws RuntimeException
*/
public function render()
{
$content = $this->getContent();
$variables = $this->getVariables();
$keys = array_keys($variables);
return str_replace($keys, $variables, $content);
}
public function reset()
{
$this->assignMany(array(), false);
}
/**
* @return string
* @throws RuntimeException
*/
public function __toString()
{
return $this->render();
}
/**
* @return string
* @throws RuntimeException
*/
abstract protected function getContent();
/**
* @param string $key
* @return null|mixed
*/
protected function getValueByKeyOrNull($key)
{
return ($this->isAssigned($key))
? $this->variables[$key]
: null;
}
/**
* @return array
*/
protected function getVariables()
{
return $this->variables;
}
}