Class yii\smarty\ViewRenderer

Inheritanceyii\smarty\ViewRenderer » yii\base\ViewRenderer
Available since extension's version2.0
Source Code https://github.com/yiisoft/yii2-smarty/blob/master/src/ViewRenderer.php

SmartyViewRenderer allows you to use Smarty templates in views.

Public Properties

Hide inherited properties

Property Type Description Defined By
$cachePath string The directory or path alias pointing to where Smarty cache will be stored. yii\smarty\ViewRenderer
$compilePath string The directory or path alias pointing to where Smarty compiled templates will be stored. yii\smarty\ViewRenderer
$extensionClass string Extension class name yii\smarty\ViewRenderer
$imports array Class imports similar to the use tag yii\smarty\ViewRenderer
$options array Additional Smarty options yii\smarty\ViewRenderer
$pluginDirs array Add additional directories to Smarty's search path for plugins. yii\smarty\ViewRenderer
$smarty \Smarty The Smarty object used for rendering yii\smarty\ViewRenderer
$smartyClass string The Smarty class yii\smarty\ViewRenderer
$widgets array Widget declarations yii\smarty\ViewRenderer

Protected Properties

Hide inherited properties

Property Type Description Defined By

Public Methods

Hide inherited methods

Method Description Defined By
__call() Mechanism to pass a widget's tag name to the callback function. yii\smarty\ViewRenderer
aliasHandler() Resolves Yii alias into file path yii\smarty\ViewRenderer
init() Instantiates and configures the Smarty object. yii\smarty\ViewRenderer
render() Renders a view file. yii\smarty\ViewRenderer

Protected Methods

Hide inherited methods

Method Description Defined By
resolveTemplateDir() The directory can be specified in Yii's standard convention using @, // and / prefixes or no prefix for view relative directories. yii\smarty\ViewRenderer

Property Details

Hide inherited properties

$cachePath public property

The directory or path alias pointing to where Smarty cache will be stored.

public string $cachePath '@runtime/Smarty/cache'
$compilePath public property

The directory or path alias pointing to where Smarty compiled templates will be stored.

public string $compilePath '@runtime/Smarty/compile'
$extensionClass public property

Extension class name

public string $extensionClass '\yii\smarty\Extension'
$imports public property

Class imports similar to the use tag

public array $imports = []
$options public property

Additional Smarty options

See also http://www.smarty.net/docs/en/api.variables.tpl.

public array $options = []
$pluginDirs public property

Add additional directories to Smarty's search path for plugins.

public array $pluginDirs = []
$smarty protected property

The Smarty object used for rendering

protected \Smarty $smarty null
$smartyClass public property (available since version 2.0.7)

The Smarty class

public string $smartyClass '\Smarty'
$widgets public property

Widget declarations

public array $widgets = [
    
'functions' => [],
    
'blocks' => [],
]

Method Details

Hide inherited methods

__call() public method

Mechanism to pass a widget's tag name to the callback function.

Using a magic function call would not be necessary if Smarty would support closures. Smarty closure support is announced for 3.2, until its release magic function calls are used to pass the tag name to the callback.

public string __call ( $method, $args )
$method string
$args array
throws \yii\base\InvalidConfigException
throws BadMethodCallException

                public function __call($method, $args)
{
    $methodInfo = explode('__', $method);
    if (count($methodInfo) === 2) {
        $alias = $methodInfo[1];
        if (isset($this->widgets['functions'][$alias])) {
            if (($methodInfo[0] === '_widget_function') && (count($args) === 2)) {
                return $this->widgetFunction($this->widgets['functions'][$alias], $args[0], $args[1]);
            }
        } elseif (isset($this->widgets['blocks'][$alias])) {
            if (($methodInfo[0] === '_widget_block') && (count($args) === 4)) {
                return $this->widgetBlock($this->widgets['blocks'][$alias], $args[0], $args[1], $args[2], $args[3]);
            }
        } else {
            throw new InvalidConfigException('Widget "' . $alias . '" not declared.');
        }
    }
    throw new \BadMethodCallException('Method does not exist: ' . $method);
}

            
aliasHandler() public method

Resolves Yii alias into file path

public boolean|string aliasHandler ( $type, $name, &$content, &$modified, \Smarty $smarty )
$type string
$name string
$content string
$modified string
$smarty \Smarty
return boolean|string

Path to file or false if it's not found

                public function aliasHandler($type, $name, &$content, &$modified, Smarty $smarty)
{
    $file = Yii::getAlias($name);
    return is_file($file) ? $file : false;
}

            
init() public method

Instantiates and configures the Smarty object.

public void init ( )

                public function init()
{
    $this->smarty = new $this->smartyClass();
    $this->smarty->setCompileDir(Yii::getAlias($this->compilePath));
    $this->smarty->setCacheDir(Yii::getAlias($this->cachePath));
    foreach ($this->options as $key => $value) {
        $this->smarty->$key = $value;
    }
    $this->smarty->addTemplateDir([
        dirname(Yii::$app->getView()->getViewFile()),
        Yii::$app->getViewPath(),
    ]);
    // Add additional plugin dirs from configuration array, apply Yii's dir convention
    foreach ($this->pluginDirs as &$dir) {
        $dir = $this->resolveTemplateDir($dir);
    }
    $this->smarty->addPluginsDir($this->pluginDirs);
    if (isset($this->imports)) {
        foreach(($this->imports) as $tag => $class) {
            $this->smarty->registerClass($tag, $class);
        }
    }
    // Register block widgets specified in configuration array
    if (isset($this->widgets['blocks'])) {
        foreach(($this->widgets['blocks']) as $tag => $class) {
            $this->smarty->registerPlugin('block', $tag, [$this, '_widget_block__' . $tag]);
            $this->smarty->registerClass($tag, $class);
        }
    }
    // Register function widgets specified in configuration array
    if (isset($this->widgets['functions'])) {
        foreach(($this->widgets['functions']) as $tag => $class) {
            $this->smarty->registerPlugin('function', $tag, [$this, '_widget_function__' . $tag]);
            $this->smarty->registerClass($tag, $class);
        }
    }
    new $this->extensionClass($this, $this->smarty);
    $this->smarty->default_template_handler_func = [$this, 'aliasHandler'];
}

            
render() public method

Renders a view file.

This method is invoked by View whenever it tries to render a view. Child classes must implement this method to render the given view file.

public string render ( $view, $file, $params )
$view \yii\web\View

The view object used for rendering the file.

$file string

The view file.

$params array

The parameters to be passed to the view file.

return string

The rendering result

                public function render($view, $file, $params)
{
    /* @var $template \Smarty_Internal_Template */
    $template = $this->smarty->createTemplate($file, null, null, empty($params) ? null : $params, false);
    // Make Yii params available as smarty config variables
    $template->config_vars = Yii::$app->params;
    $template->assign('app', \Yii::$app);
    $template->assign('this', $view);
    return $template->fetch();
}

            
resolveTemplateDir() protected method

The directory can be specified in Yii's standard convention using @, // and / prefixes or no prefix for view relative directories.

protected string resolveTemplateDir ( $dir )
$dir string

Directory name to be resolved

return string

The resolved directory name

                protected function resolveTemplateDir($dir)
{
    if (strncmp($dir, '@', 1) === 0) {
        // e.g. "@app/views/dir"
        $dir = Yii::getAlias($dir);
    } elseif (strncmp($dir, '//', 2) === 0) {
        // e.g. "//layouts/dir"
        $dir = Yii::$app->getViewPath() . DIRECTORY_SEPARATOR . ltrim($dir, '/');
    } elseif (strncmp($dir, '/', 1) === 0) {
        // e.g. "/site/dir"
        if (Yii::$app->controller !== null) {
            $dir = Yii::$app->controller->module->getViewPath() . DIRECTORY_SEPARATOR . ltrim($dir, '/');
        } else {
            // No controller, what to do?
        }
    } else {
        // relative to view file
        $dir = dirname(Yii::$app->getView()->getViewFile()) . DIRECTORY_SEPARATOR . $dir;
    }
    return $dir;
}