Using template engines ====================== By default Yii uses PHP as template language, but you can configure it to support other rendering engines, such as [Twig](http://twig.sensiolabs.org/) or [Smarty](http://www.smarty.net/). The `view` component is responsible for rendering views. You can add a custom template engines by reconfiguring this component's behavior: ```php [ 'components' => [ 'view' => [ 'class' => 'yii\web\View', 'renderers' => [ 'tpl' => [ 'class' => 'yii\smarty\ViewRenderer', //'cachePath' => '@runtime/Smarty/cache', ], 'twig' => [ 'class' => 'yii\twig\ViewRenderer', //'cachePath' => '@runtime/Twig/cache', //'options' => [], /* Array of twig options */ 'globals' => ['html' => '\yii\helpers\Html'], ], // ... ], ], ], ] ``` In the config above we're using Smarty and Twig. In order to get these extensions in your project you need to modify your `composer.json` to include ``` "yiisoft/yii2-smarty": "*", "yiisoft/yii2-twig": "*", ``` in `require` section and then run `composer update`. Twig ---- To use Twig, you need to create templates in files with the `.twig` extension (or use another file extension but configure the component accordingly). Unlike standard view files, when using Twig, you must include the extension when calling `$this->render()` or `$this->renderPartial()` from your controller: ```php echo $this->render('renderer.twig', ['username' => 'Alex']); ``` ### Additional functions Yii adds the following construct to the standard Twig syntax: ```php {{ post.title }} ``` Internally, the `path()` function calls Yii's `Html::url()` method. ### Additional variables Within Twig templates, you can also make use of these variables: - `app`, which equates to `\Yii::$app` - `this`, which equates to the current `View` object ### Globals You can add global helpers or values via config's `globals`. It allows both using Yii helpers and setting your own values: ```php 'globals' => [ 'html' => '\yii\helpers\Html', 'name' => 'Carsten', ], ``` Then in your template you can use it the following way: ``` Hello, {{name}}! {{ html.link('Please login', 'site/login') }}. ``` ### Additional filters Additional filters may be added via config's `filters` option: ```php 'filters' => [ 'jsonEncode' => '\yii\helpers\Json::encode', ], ``` Then in the template you can use ``` {{ model|jsonEncode }} ``` Smarty ------ To use Smarty, you need to create templates in files with the `.tpl` extension (or use another file extension but configure the component accordingly). Unlike standard view files, when using Smarty, you must include the extension when calling `$this->render()` or `$this->renderPartial()` from your controller: ```php echo $this->render('renderer.tpl', ['username' => 'Alex']); ``` ### Additional functions Yii adds the following construct to the standard Smarty syntax: ```php {$post.title} ``` Internally, the `path()` function calls Yii's `Html::url()` method. ### Additional variables Within Smarty templates, you can also make use of these variables: - `$app`, which equates to `\Yii::$app` - `$this`, which equates to the current `View` object