public function widget($widget, $options = [], $cacheOptions = null)
{
$widgetClassName = $this->alias->resolve("@ns.widgets\\{$widget}Widget");
if (!class_exists($widgetClassName)) {
throw new ViewException('`:widget` widget is invalid: `:class` class is not exists', ['widget' => $widget, 'class' => $widgetClassName]);
}
/**
* @var \ManaPHP\Mvc\WidgetInterface $widgetInstance
*/
$widgetInstance = $this->_dependencyInjector->get($widgetClassName);
$vars = $widgetInstance->run($options);
$view = '@views/Widgets/' . $widget;
if ($cacheOptions !== null) {
$cacheOptions = is_array($cacheOptions) ? $cacheOptions : ['ttl' => $cacheOptions];
$cacheOptions['key'] = $view . (isset($cacheOptions['key']) ? '/' . $cacheOptions['key'] : '');
$cacheOptions['key'] = str_replace($this->alias->resolve('@app') . '/', '', $this->alias->resolve($cacheOptions['key']));
$content = $this->viewsCache->get($cacheOptions['key']);
if ($content === false) {
if (is_string($vars)) {
$content = $vars;
} else {
$content = $this->_render($view, $vars, false);
}
$this->viewsCache->set($cacheOptions['key'], $content, $cacheOptions['ttl']);
}
echo $content;
} else {
if (is_string($vars)) {
echo $vars;
} else {
$this->_render($view, $vars, true);
}
}
}