public function view($template, $slots = [])
{
$renderer = $this->renderer;
$olayout = $this->layout;
$slots = array_merge($this->viewvars, $slots);
$layout = $olayout;
$this->layout = false;
if (strpos($template, ' with ') !== false) {
list($template, $layout) = explode(' with ', $template, 2);
}
if (strpos($template, ':') !== false && ($file = $this->path($template))) {
$template = $file;
}
$slots['extend'] = function ($from) use(&$layout) {
$layout = $from;
};
if (!file_exists($template)) {
return "Couldn't resolve {$template}.";
}
$output = $renderer->file($template, $slots);
if ($layout) {
if (strpos($layout, ':') !== false && ($file = $this->path($layout))) {
$layout = $file;
}
if (!file_exists($layout)) {
return "Couldn't resolve {$layout}.";
}
$slots["content_for_layout"] = $output;
$output = $renderer->file($layout, $slots);
}
$this->layout = $olayout;
return $output;
}