Как пользоваться справочником
Все фильтры применяются через символ | (pipe). Фильтры можно объединять в цепочки:
<!-- Базовое использование -->
{{ variable | filter }}
<!-- С параметрами -->
{{ variable | filter(param1, param2) }}
<!-- Цепочка фильтров -->
{{ variable | filter1 | filter2 | filter3 }}
Текстовые фильтры
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
upper |
Преобразует в верхний регистр (с поддержкой UTF-8) |
- |
{{ "привет" | upper }} |
ПРИВЕТ |
lower |
Преобразует в нижний регистр (с поддержкой UTF-8) |
- |
{{ "ПРИВЕТ" | lower }} |
привет |
title |
Каждое слово с заглавной буквы |
- |
{{ "привет мир" | title }} |
Привет Мир |
capitalize |
Первая буква заглавная |
- |
{{ "привет" | capitalize }} |
Привет |
trim |
Удаляет пробелы в начале и конце |
- |
{{ " текст " | trim }} |
текст |
truncate |
Обрезает строку до указанной длины |
length (100), suffix ('...') |
{{ text | truncate(50, '...') }} |
Первые 50 символов... |
truncate_words |
Обрезает текст до указанного количества слов |
wordCount (100), suffix ('...') |
{{ text | truncate_words(10) }} |
Первые десять слов текста... |
excerpt |
Создает выдержку из текста (удаляет HTML) |
length (50), suffix ('...') |
{{ html_content | excerpt(100) }} |
Текст без HTML тегов... |
nl2br |
Преобразует переносы строк в <br> с экранированием |
- |
{{ "строка\nстрока" | nl2br }} |
строка<br>строка |
escape |
Экранирует HTML символы |
- |
{{ "<script>" | escape }} |
<script> |
strip_tags |
Удаляет HTML теги |
allowedTags ('') |
{{ "<p>text</p>" | strip_tags }} |
text |
replace |
Заменяет подстроку |
search, replace |
{{ "Hello World" | replace("World", "MNRFY") }} |
Hello MNRFY |
split |
Разбивает строку в массив |
separator (',') |
{{ "a,b,c" | split(',') }} |
['a', 'b', 'c'] |
wordwrap |
Переносит длинные слова |
width (75), break ("\n"), cut (false) |
{{ long_text | wordwrap(50) }} |
Текст с переносами |
Числовые фильтры
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
number |
Форматирует число с разделителями |
decimals (0), decimalSep ('.'), thousandsSep (',') |
{{ 1234.567 | number(2) }} |
1,234.57 |
money |
Форматирует как валюту |
currency ('$'), decimals (2), decimalSep ('.'), thousandsSep (',') |
{{ 1500 | money('₽', 0) }} |
₽1,500 |
round |
Округляет число |
precision (0) |
{{ 3.14159 | round(2) }} |
3.14 |
floor |
Округляет вниз |
- |
{{ 3.9 | floor }} |
3 |
ceil |
Округляет вверх |
- |
{{ 3.1 | ceil }} |
4 |
abs |
Абсолютное значение |
- |
{{ -42 | abs }} |
42 |
Фильтры дат
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
date |
Форматирует дату по PHP формату |
format ('Y-m-d') |
{{ timestamp | date('d.m.Y H:i') }} |
15.01.2024 14:30 |
Фильтры массивов и коллекций
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
length |
Длина массива/строки/объекта |
- |
{{ [1,2,3] | length }} |
3 |
count |
Алиас для length |
- |
{{ items | count }} |
Количество элементов |
size |
Алиас для length |
- |
{{ collection | size }} |
Размер коллекции |
first |
Первый элемент массива или символ строки |
- |
{{ [1,2,3] | first }} |
1 |
last |
Последний элемент массива или символ строки |
- |
{{ [1,2,3] | last }} |
3 |
sort |
Базовая сортировка массива |
direction ('asc') |
{{ [3,1,2] | sort }} |
[1,2,3] |
sort_by |
Сортировка по полю (поддерживает dot notation) |
field, direction ('asc') |
{{ users | sort_by('age', 'desc') }} |
Отсортированный массив |
sort_keys |
Сортировка по ключам |
direction ('asc') |
{{ hash | sort_keys }} |
Массив с отсортированными ключами |
reverse |
Обращает порядок элементов |
- |
{{ [1,2,3] | reverse }} |
[3,2,1] |
unique |
Удаляет дубликаты |
- |
{{ [1,1,2,3] | unique }} |
[1,2,3] |
slice |
Извлекает часть массива |
offset, length (null) |
{{ [1,2,3,4,5] | slice(1, 3) }} |
[2,3,4] |
join |
Объединяет элементы в строку |
separator (', ') |
{{ ['a','b','c'] | join(' - ') }} |
a - b - c |
keys |
Возвращает ключи массива/объекта |
- |
{{ {'a': 1, 'b': 2} | keys }} |
['a', 'b'] |
values |
Возвращает значения массива/объекта |
- |
{{ {'a': 1, 'b': 2} | values }} |
[1, 2] |
push |
Добавляет элемент в конец |
value |
{{ [1,2] | push(3) }} |
[1,2,3] |
prepend |
Добавляет элемент в начало |
value |
{{ [2,3] | prepend(1) }} |
[1,2,3] |
merge |
Объединяет два массива |
array2 |
{{ [1,2] | merge([3,4]) }} |
[1,2,3,4] |
group_by |
Группирует элементы по полю |
field |
{{ users | group_by('role') }} |
{'admin': [...], 'user': [...]} |
pluck |
Извлекает значения поля из массива объектов |
field |
{{ users | pluck('name') }} |
['John', 'Jane', ...] |
flip |
Меняет местами ключи и значения |
- |
{{ {'a': 1, 'b': 2} | flip }} |
{1: 'a', 2: 'b'} |
to_array |
Преобразует объект в массив |
- |
{{ object | to_array }} |
Массив свойств объекта |
Фильтры работы с объектами
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
has_key |
Проверяет наличие ключа |
key |
{{ object | has_key('name') }} |
true/false |
key_exists |
Алиас для has_key |
key |
{{ array | key_exists('id') }} |
true/false |
get |
Получает значение по ключу с default |
key, default (null) |
{{ data | get('name', 'Anonymous') }} |
Значение или default |
pick |
Выбирает указанные ключи |
...keys |
{{ user | pick('id', 'name') }} |
{'id': 1, 'name': 'John'} |
omit |
Исключает указанные ключи |
...keys |
{{ user | omit('password') }} |
Объект без указанных ключей |
keys_recursive |
Получает все ключи рекурсивно |
prefix ('') |
{{ nested | keys_recursive }} |
['key1', 'key1.subkey', ...] |
Служебные фильтры
| Фильтр |
Описание |
Параметры |
Пример |
Результат |
default |
Значение по умолчанию для пустых значений |
default ('') |
{{ null | default('Нет данных') }} |
Нет данных |
default_if_null |
Значение по умолчанию только для null |
default ('') |
{{ '' | default_if_null('empty') }} |
'' (пустая строка) |
default_if_empty |
Значение по умолчанию для пустых (но не null) |
default ('') |
{{ '' | default_if_empty('empty') }} |
empty |
json |
Преобразует в JSON (без экранирования unicode) |
- |
{{ {'name': 'Иван'} | json }} |
{"name":"Иван"} |
urlencode |
URL-кодирование строки |
- |
{{ "hello world" | urlencode }} |
hello%20world |
urldecode |
URL-декодирование строки |
- |
{{ "hello%20world" | urldecode }} |
hello world |
md5 |
MD5 хеш строки |
- |
{{ "password" | md5 }} |
5f4dcc3b5aa765d61d8327deb882cf99 |
sha1 |
SHA1 хеш строки |
- |
{{ "password" | sha1 }} |
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
sha256 |
SHA256 хеш строки |
- |
{{ "password" | sha256 }} |
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 |
Специализированные фильтры
| Фильтр |
Описание |
Параметры |
Пример |
classes |
Генерирует CSS классы на основе условий |
- |
<div class="{{ {
'active': user.is_active,
'premium': user.is_premium,
'disabled': !user.enabled
} | classes }}">
|
format_bytes |
Форматирует размер файла |
precision (2) |
{{ 1048576 | format_bytes }} // 1 MB |
pluralize |
Выбирает форму множественного числа |
singular, plural (null) |
{{ count | pluralize('item', 'items') }} |
Примеры цепочек фильтров
Обработка пользовательского текста
{{ user_text | trim | truncate(100) | nl2br }}
Форматирование цены с НДС
{{ (product.price * 1.2) | round(2) | money('₽', 2, ',', ' ') }}
Обработка списка тегов
{{ tags | split(',') | unique | sort | slice(0, 5) | join(', ') }}
Создание URL из названия
{{ article.title | lower | replace(' ', '-') | urlencode }}
Условное применение фильтров
<!-- Применяем truncate только если текст длинный -->
{{ description | length > 100 ? (description | truncate(100)) : description }}
<!-- Форматируем как деньги только если это число -->
{{ value is numeric ? (value | money('$')) : value }}
Внимание: Фильтры url в шаблонизаторе не существует. Используйте urlencode или urldecode.
Совет: Фильтры выполняются слева направо. Учитывайте порядок применения при создании сложных цепочек. Например, сначала trim, потом truncate.