mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-07 00:18:25 +08:00
135 lines
3.4 KiB
Markdown
135 lines
3.4 KiB
Markdown
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'],
|
|
* Example:
|
|
* Than in template: {{ html.link('Login', 'site/login') }}
|
|
],
|
|
// ...
|
|
],
|
|
],
|
|
],
|
|
]
|
|
```
|
|
|
|
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
|
|
<a href="{{ path('blog/view', {'alias' : post.alias}) }}">{{ post.title }}</a>
|
|
```
|
|
|
|
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
|
|
<a href="{path route='blog/view' alias=$post.alias}">{$post.title}</a>
|
|
```
|
|
|
|
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
|
|
|