BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

Обзор Twig в IO7

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • Архитектура
  • Инициализация
  • Директории шаблонов
  • Рендер шаблона
  • Контекст
    • Автоматический контекст
  • Кастомные функции
  • Twig-опции
  • См. также

IO7 использует Twig в качестве шаблонизатора. Интеграция включает автоматическую регистрацию функций из модулей, контекст сессии, и кастомные Twig-функции.

Архитектура

IO\Twig
    ├── Twig\Environment        ← ядро Twig
    ├── Twig\Loader\FilesystemLoader ← загрузчик шаблонов
    ├── Context                 ← глобальные переменные
    └── TwigFunctions           ← кастомные функции модулей

Инициализация

// Автоматически через App
$app->create_twig();

// Или вручную
$twig = \IO\Twig::create($app);

Директории шаблонов

Шаблоны загружаются из поддиректорий Templates модулей:

modules/
├── io7/
│   └── Templates/          ← namespace: io7
│       ├── layout.twig
│       └── components/
└── myapp/
    └── Templates/          ← namespace: myapp
        └── pages/
            └── home.twig

Использование с namespace:

{# Шаблон из модуля io7 #}
{% extends '@io/layout.twig' %}

{# Шаблон из модуля myapp #}
{% include '@app/pages/home.twig' %}

Рендер шаблона

// Через Route
return $this->render('@app/pages/home.twig', [
    'title'   => 'Главная',
    'content' => 'Добро пожаловать!',
]);

// Напрямую через Twig
$html = $app->twig->render('@app/pages/home.twig', [
    'user' => $currentUser,
]);

// С контекстом (установленные переменные доступны автоматически)
$app->twig->setContext('page_title', 'Главная');
$html = $app->twig->render('@app/pages/home.twig', ['content' => '...']);

Контекст

Контекст — глобальные переменные, доступные во всех шаблонах:

$twig->setContext('user_name', 'John');
$twig->setContext('is_admin', true);
{# В шаблоне #}
<p>Привет, {{ user_name }}!</p>
{% if is_admin %}
    <a href="/admin">Админ-панель</a>
{% endif %}

Автоматический контекст

При вызове setup_context() устанавливаются:

КлючОписание
appЭкземпляр IO\App
CLOUD_ENVОкружение (dev, prod)
JWT_TOKENДанные JWT-токена
SESSION_DATAДанные сессии
IOPROJECTИмя текущего проекта
IOENABLECDNCDN-хост
ioSessionЭкземпляр сессии
ioProjectsКонфигурация проектов

Кастомные функции

Функции определяются в классах TwigFunctions модулей:

namespace App;

class TwigFunctions
{
    public static function format_price(float $price, string $currency = '₸'): string
    {
        return number_format($price, 2, '.', ' ') . ' ' . $currency;
    }

    public static function time_ago(string $datetime): string
    {
        $diff = time() - strtotime($datetime);
        return match (true) {
            $diff < 60 => 'только что',
            $diff < 3600 => floor($diff / 60) . ' мин. назад',
            $diff < 86400 => floor($diff / 3600) . ' ч. назад',
            default => floor($diff / 86400) . ' дн. назад',
        };
    }
}
<p>{{ format_price(1500.50) }}</p>     {# 1 500.50 ₸ #}
<p>{{ time_ago(post.created_at) }}</p> {# 5 мин. назад #}

Twig-опции

ОпцияЗначение
autoescapetrue (HTML-экранирование)
charsetutf-8
auto_reloadtrue
cache/data/cache/php/twig
optimizations-1 (максимальные)

См. также

  • Формы (FormBuilder)
  • Twig функции
Next
Формы (FormBuilder)