Twig функции IO7
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
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
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$action | string | — | Да | URL действия формы |
$method | string | 'POST' | Нет | HTTP метод (POST, GET) |
$ajax | bool | true | Нет | 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
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$name | string | — | Да | Имя поля |
$label | string | '' | Нет | Подпись |
$value | string | '' | Нет | Значение |
$options | array | [] | Нет | 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'] | int | 4 | Нет | Количество строк |
$options['cols'] | int | 50 | Нет | Количество столбцов |
{{ 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
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$options | array | [] | Нет | Ассоциативный массив ['value' => 'label'] |
$selected | string | '' | Нет | Выбранное значение |
$attrs | array | [] | Нет | 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
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$type | string | 'submit' | Нет | submit, button, reset |
$options['class'] | string | '' | Нет | CSS-класс |
$options['disabled'] | bool | false | Нет | Заблокирована |
{{ 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 каждого модуля при первом использовании.