Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Yii2 Twig Laravel Package

yiisoft/yii2-twig

View on GitHub
Deep Wiki
Context7

Синтаксис шаблонизатора

Лучшим ресурсом для изучения основ шаблонизатора Twig является официальная документация, которую можно найти тут - twig.symfony.com. Ниже описаны синтаксические расширения, специфичные для Yii:

Вызов метода и функции

Если необходимо получить результат в переменную, вы можете вызвать метод или функцию следующим образом:

{% set result = my_function({'a' : 'b'}) %}
{% set result = myObject.my_function({'a' : 'b'}) %}

Если необходимо вывести результат без сохранения в переменную:

{{ my_function({'a' : 'b'}) }}
{{ myObject.my_function({'a' : 'b'}) }}

Также вы можете использовать обертку void, если нет необходимости сохранять результат:

{{ void(my_function({'a' : 'b'})) }}
{{ void(myObject.my_function({'a' : 'b'})) }}

Установка свойств объекта

Специальная функция set позволяет устанавливать свойства объекта. Например, следующий фрагмент кода изменяет title страницы:

{{ set(this, 'title', 'New title') }}

Импортирование виджетов, пространств имен и классов

Вы можете импортировать в шаблон классы и пространства имен следующим образом:

Импортирование пространства имен:
{{ use('/app/widgets') }}

Импортирование класса:
{{ use('/yii/widgets/ActiveForm') }}

Импортирование класса с использованием псевдонима:
{{ use({'alias' : '/app/widgets/MyWidget'}) }}

Подробная информация находится в разделе Шаблоны и виджеты

Импортирование других классов

В большинстве случаев, кроме виджетов и ассетов, вам понадобится импортировать классы через секцию globals.

Например, этот код ничего не выведет:

{{ use('yii/helpers/Url') }}
<h1>{{ Url.base(true) }}</h1>

и этот код тоже ничего не выведет:

{{ use ('app/models/MyClass') }}  
{{ MyClass.helloWorld() }}

Вы должны указать эти классы в конфигурации, используя секцию globals:

// ....
'view' => [
    'class' => 'yii\web\View',
    'renderers' => [
        'twig' => [
            'class' => 'yii\twig\ViewRenderer',
            'cachePath' => '[@runtime](https://github.com/runtime)/Twig/cache',
            'options' => [
                'auto_reload' => true,
            ],
            'globals' => [
                'Url' => ['class' => '\yii\helpers\Url'],
                'MyClass' => ['class' => '\frontend\models\MyClass'],
            ],
        ],
    ],
],
// ....

Только после этого вы можете использовать классы таким образом:

<h1>{{ Url.base(true) }}</h1>
{{ MyClass.helloWorld() }}

Интеграция шаблонов

Интегрировать другие шаблоны в текущий шаблон можно с помощью двух операторов include и extends:

{% include "comment.twig" %}
{% extends "post.twig" %}

{% include "[@app](https://github.com/app)/views/snippets/avatar.twig" %}
{% extends "[@app](https://github.com/app)/views/layouts/2columns.twig" %}

В первом случае файл вида будет искаться относительно текущего пути. Это значит что файлы comment.twig и post.twig будут искаться в той же директории, что и текущий отображаемый шаблон.

Во втором случае мы используем псевдонимы путей. Все псевдонимы Yii, такие как [@app](https://github.com/app), доступны по умолчанию.

Вы также можете использовать метод render внутри вида:

{{ this.render('comment.twig', {'data1' : data1, 'data2' : data2}) | raw }}

Ассеты

Ассеты могут быть зарегистрированы следующим способом (начиная с версии 2.0.4):

{{ register_asset_bundle('yii/web/JqueryAsset') }}

Более подробный синтаксис:

{{ use('yii/web/JqueryAsset') }}
{{ register_jquery_asset() }}

В коде, указанном выше, register определяет, что мы работаем с ассетами, а jquery_asset переводится в класс JqueryAsset, который уже импортирован с помощью use.

URLs

Для построения URL-ов вы можете использовать следующие функции:

<a href="{{ path(['blog/view'], {'alias' : post.alias}) }}">{{ post.title }}</a>
<a href="{{ url(['blog/view'], {'alias' : post.alias}) }}">{{ post.title }}</a>

Функция path генерирует относительный URL, url - абсолютный. Внутри себя обе функции используют [[\yii\helpers\Url::to]].

Дополнительные переменные

Следующие переменные всегда определены в шаблонах Twig:

  • app, которая соответствует \Yii::$app
  • this, которая соответствует текущему объекту View

Блоки

Вы можете определять блоки следующим образом:

{{ void(this.beginBlock('block1')) }}
now, block1 is set
{{ void(this.endBlock()) }}

Затем отображать блоки в основном шаблоне (layout):

{{ this.blocks['block1'] }}

Перевод сообщений

Вы можете использовать следующий синтаксис для перевода сообщений:

{{ t('app', 'Hello, world!') }}

Для того, чтобы ./yii message видела сообщения, убедитесь что директория [@runtime](https://github.com/runtime)/Twig/cache не исключена из сканирования.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
babenkoivan/elastic-client
innmind/static-analysis
innmind/coding-standard
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony