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
<?php
/*
* This file is part of the ICanBoogie package.
*
* (c) Olivier Laviale <olivier.laviale@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ICanBoogie\Render;
/**
* Renders PHP templates.
*/
class PHPEngine implements Engine
{
/**
* @inheritdoc
*/
public function render($template_pathname, $thisArg, array $variables, array $options = [])
{
$f = \Closure::bind(function($__TEMPLATE_PATHNAME__, $__VARIABLES__) {
extract($__VARIABLES__);
require $__TEMPLATE_PATHNAME__;
}, $this->ensure_is_object($thisArg));
ob_start();
try
{
$f($template_pathname, [ self::VAR_TEMPLATE_PATHNAME => $template_pathname ] + $variables);
return ob_get_clean();
}
catch (\Exception $e)
{
ob_end_clean();
throw $e;
}
}
/**
* Ensures that a value is an object.
*
* - `value` is an object, value is returned.
* - `value` is an array, an `ArrayObject` instance is returned.
* - Otherwise `value` is cast into a string and a {@link String} instance is returned.
*
* @param $value
*
* @return \ArrayObject|StringObject
*/
protected function ensure_is_object($value)
{
if (is_object($value))
{
return $value;
}
if (is_array($value))
{
return new \ArrayObject($value);
}
return new StringObject($value);
}
}