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

Внимание

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

  • Как работают кастомные функции
  • Встроенные функции (IO\TwigFunctions)
    • io_test()
    • getGenPageTime()
  • Формы (Twig-функции)
    • form_open()
    • form_close()
    • form_text()
    • form_email()
    • form_password()
    • form_textarea()
    • form_select()
    • form_checkbox()
    • form_radio()
    • form_hidden()
    • form_button()
  • Создание собственных функций
    • Определение в модуле
    • Использование в шаблоне
  • Автоматический контекст
  • См. также

IO7 автоматически регистрирует кастомные Twig-функции из классов TwigFunctions модулей.


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

При использовании неизвестной функции в шаблоне Twig, IO7 ищет метод с таким именем в классах TwigFunctions всех зарегистрированных модулей:

namespace App;

class TwigFunctions
{
    public static function my_function(string $arg): string
    {
        return "Результат: $arg";
    }
}
{# В шаблоне #}
{{ my_function('данные') }}
{# Вывод: Результат: данные #}

Встроенные функции (IO\TwigFunctions)

io_test()

Тестовая функция для проверки интеграции Twig.

public static function io_test(): string
{{ io_test() }}
{# Вывод: io test #}

getGenPageTime()

Время генерации страницы в миллисекундах.

public static function getGenPageTime(): int
<p>Сгенерировано за {{ getGenPageTime() }} мс</p>

Формы (Twig-функции)

form_open()

Открывает форму.

public static function form_open(
    string $action,
    string $method = 'POST',
    bool $ajax = true
): string
ПараметрТипЗначение по умолчаниюОбязателенОписание
$actionstring—ДаURL действия формы
$methodstring'POST'НетHTTP метод (POST, GET)
$ajaxbooltrueНетAJAX-режим
{{ form_open('/api/users', 'POST', true) }}
{# <form action="/api/users" method="POST" data-ajax="true"> #}

form_close()

Закрывает форму.

public static function form_close(): string
{{ form_close() }}
{# </form> #}

form_text()

Текстовое поле.

public static function form_text(
    string $name,
    string $label = '',
    string $value = '',
    array $options = []
): string
ПараметрТипЗначение по умолчаниюОбязателенОписание
$namestring—ДаИмя поля
$labelstring''НетПодпись
$valuestring''НетЗначение
$optionsarray[]Нетrequired, placeholder, disabled, class
{{ form_text('name', 'Имя пользователя', user.name, {'required': true}) }}

form_email()

Поле email.

public static function form_email(
    string $name,
    string $label = '',
    string $value = '',
    array $options = []
): string
{{ form_email('email', 'Email', user.email, {'required': true}) }}

form_password()

Поле пароля.

public static function form_password(
    string $name,
    string $label = '',
    array $options = []
): string
{{ form_password('password', 'Пароль', {'required': true}) }}

form_textarea()

Многострочное текстовое поле.

public static function form_textarea(
    string $name,
    string $label = '',
    string $value = '',
    array $options = []
): string
ПараметрТипЗначение по умолчаниюОбязателенОписание
$options['rows']int4НетКоличество строк
$options['cols']int50НетКоличество столбцов
{{ form_textarea('bio', 'О себе', user.bio, {'rows': 6}) }}

form_select()

Выпадающий список.

public static function form_select(
    string $name,
    string $label = '',
    array $options = [],
    string $selected = '',
    array $attrs = []
): string
ПараметрТипЗначение по умолчаниюОбязателенОписание
$optionsarray[]НетАссоциативный массив ['value' => 'label']
$selectedstring''НетВыбранное значение
$attrsarray[]Нетrequired, class
{{ form_select('role', 'Роль', ['admin' => 'Админ', 'user' => 'Юзер'], user.role) }}

form_checkbox()

Чекбокс.

public static function form_checkbox(
    string $name,
    string $label = '',
    bool $checked = false,
    string $value = '1'
): string
{{ form_checkbox('active', 'Активен', user.active == 1) }}

form_radio()

Radio-кнопки.

public static function form_radio(
    string $name,
    string $label = '',
    array $options = [],
    string $selected = ''
): string
{{ form_radio('gender', 'Пол', ['m' => 'Мужской', 'f' => 'Женский'], user.gender) }}

form_hidden()

Скрытое поле.

public static function form_hidden(string $name, string $value): string
{{ form_hidden('user_id', user.pkid) }}

form_button()

Кнопка.

public static function form_button(
    string $label,
    string $type = 'submit',
    array $options = []
): string
ПараметрТипЗначение по умолчаниюОбязателенОписание
$typestring'submit'Нетsubmit, button, reset
$options['class']string''НетCSS-класс
$options['disabled']boolfalseНетЗаблокирована
{{ form_button('Сохранить', 'submit', {'class': 'btn btn-primary'}) }}
{{ form_button('Отмена', 'button', {'class': 'btn btn-secondary'}) }}

Создание собственных функций

Определение в модуле

namespace App;

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

    public static function truncate(string $text, int $length = 100): string
    {
        return mb_strlen($text) <= $length
            ? $text
            : mb_substr($text, 0, $length) . '...';
    }

    public static function slug(string $text): string
    {
        $text = strtolower(trim($text));
        $text = preg_replace('/[^a-z0-9-]/', '-', $text);
        $text = preg_replace('/-+/', '-', $text);
        return trim($text, '-');
    }

    public static function current_year(): int
    {
        return (int) date('Y');
    }
}

Использование в шаблоне

<p>Цена: {{ format_price(1500.50) }}</p>
{# Вывод: Цена: 1 500.50 ₸ #}

<p>{{ truncate(long_text, 50) }}</p>
{# Вывод: Первые 50 символов... #}

<a href="/category/{{ slug(category.name) }}">{{ category.name }}</a>

<footer>© {{ current_year() }} Компания</footer>

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

Функции доступны во всех шаблонах без дополнительных use или импортов. IO7 автоматически ищет метод в TwigFunctions каждого модуля при первом использовании.


См. также

  • Обзор Twig
  • Формы (FormBuilder)
Prev
Формы (FormBuilder)