ManaPHP\Mvc\View::widget PHP Method

widget() public method

public widget ( string $widget, array $options = [], integer | array $cacheOptions = null )
$widget string
$options array
$cacheOptions integer | array
    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);
            }
        }
    }