Files
lichterei-web/kirby/src/Toolkit/View.php
Bastian Allgeier f732a03566 Upgrade to 3.6.3
2022-03-22 10:43:28 +01:00

138 lines
2.4 KiB
PHP
Executable File

<?php
namespace Kirby\Toolkit;
use Exception;
use Kirby\Filesystem\F;
use Throwable;
/**
* Simple PHP view engine
*
* @package Kirby Toolkit
* @author Bastian Allgeier <bastian@getkirby.com>
* @link https://getkirby.com
* @copyright Bastian Allgeier
* @license https://opensource.org/licenses/MIT
*/
class View
{
/**
* The absolute path to the view file
*
* @var string
*/
protected $file;
/**
* The view data
*
* @var array
*/
protected $data = [];
/**
* Creates a new view object
*
* @param string $file
* @param array $data
*/
public function __construct(string $file, array $data = [])
{
$this->file = $file;
$this->data = $data;
}
/**
* Returns the view's data array
* without globals.
*
* @return array
*/
public function data(): array
{
return $this->data;
}
/**
* Checks if the template file exists
*
* @return bool
*/
public function exists(): bool
{
return is_file($this->file()) === true;
}
/**
* Returns the view file
*
* @return string|false
*/
public function file()
{
return $this->file;
}
/**
* Creates an error message for the missing view exception
*
* @return string
*/
protected function missingViewMessage(): string
{
return 'The view does not exist: ' . $this->file();
}
/**
* Renders the view
*
* @return string
*/
public function render(): string
{
if ($this->exists() === false) {
throw new Exception($this->missingViewMessage());
}
ob_start();
$exception = null;
try {
F::load($this->file(), null, $this->data());
} catch (Throwable $e) {
$exception = $e;
}
$content = ob_get_contents();
ob_end_clean();
if ($exception === null) {
return $content;
}
throw $exception;
}
/**
* Alias for View::render()
*
* @return string
*/
public function toString(): string
{
return $this->render();
}
/**
* Magic string converter to enable
* converting view objects to string
*
* @return string
*/
public function __toString(): string
{
return $this->render();
}
}