diff --git a/docs/view_renderers.md b/docs/view_renderers.md index a953c45..979cead 100644 --- a/docs/view_renderers.md +++ b/docs/view_renderers.md @@ -18,6 +18,7 @@ array( ), 'twig' => array( 'class' => 'yii\renderers\TwigViewRenderer', + 'twigPath' => '@app/vendors/Twig', ), // ... ), @@ -38,6 +39,21 @@ or `$this->renderPartial()` from your controller: echo $this->render('renderer.twig', array('username' => 'Alex')); ``` +### Additional functions + +Additionally to regular Twig syntax the following is available in Yii: + +```php +{{ post.title }} +``` + +path function calls `Html::url()` internally. + +### Additional variables + +- `app` = `\Yii::$app` +- `this` = current `View` object + Smarty ------ diff --git a/framework/renderers/TwigViewRenderer.php b/framework/renderers/TwigViewRenderer.php index b92998d..79faa9f 100644 --- a/framework/renderers/TwigViewRenderer.php +++ b/framework/renderers/TwigViewRenderer.php @@ -12,6 +12,7 @@ namespace yii\renderers; use Yii; use yii\base\View; use yii\base\ViewRenderer; +use yii\helpers\Html; /** * TwigViewRenderer allows you to use Twig templates in views. @@ -53,6 +54,12 @@ class TwigViewRenderer extends ViewRenderer $this->twig = new \Twig_Environment($loader, array_merge(array( 'cache' => Yii::getAlias($this->cachePath), ), $this->options)); + + $this->twig->addFunction('path', new \Twig_Function_Function(function($path, $args = array()){ + return Html::url(array_merge(array($path), $args)); + })); + + $this->twig->addGlobal('app', \Yii::$app); } /** @@ -69,6 +76,7 @@ class TwigViewRenderer extends ViewRenderer */ public function render($view, $file, $params) { + $this->twig->addGlobal('this', $view); return $this->twig->render(file_get_contents($file), $params); } }