Функции MNRFY
Полный справочник встроенных функций шаблонизатора MNRFY
Системные функции
Конфигурация
<!-- Получение настроек приложения -->
{{ config('app.name') }} <!-- Название приложения -->
{{ config('app.debug') }} <!-- Режим отладки -->
{{ config('database.host') }} <!-- Хост БД -->
<!-- Со значением по умолчанию -->
{{ config('app.theme', 'default') }} <!-- Тема или 'default' -->
{{ config('mail.timeout', 30) }} <!-- Таймаут или 30 -->
<!-- Проверка существования настройки -->
{% if config('feature.payments') %}
<a href="/billing">Биллинг</a>
{% endif %}
Даты и время
<!-- Текущие дата и время -->
{{ date('Y-m-d') }} <!-- 2024-01-15 -->
{{ date('d.m.Y H:i') }} <!-- 15.01.2024 14:30 -->
{{ time() }} <!-- 1705334400 (timestamp) -->
<!-- Форматирование даты с локалью -->
{{ strftime('%A, %d %B %Y') }} <!-- Понедельник, 15 января 2024 -->
Математические функции
{% set numbers = [10, 5, 20, 3] %}
{% set negativeValue = -42 %}
{% set piValue = 3.14159 %}
<!-- Случайные числа -->
{{ rand(1, 100) }} <!-- Число от 1 до 100 -->
{{ rand() }} <!-- Случайное число -->
<!-- Математические операции -->
{{ abs(negativeValue) }} <!-- 42 -->
{{ max(numbers) }} <!-- 20 -->
{{ min(numbers) }} <!-- 3 -->
{{ round(piValue, 2) }} <!-- 3.14 -->
<!-- Расширенные функции -->
{{ pow(2, 8) }} <!-- 256 -->
{{ sqrt(16) }} <!-- 4 -->
Функции работы с файлами и ресурсами
Ассеты и URL
<!-- Статические ресурсы -->
{{ asset('css/app.css') }} <!-- /mnrfy-common/css/app.css -->
{{ asset('js/script.js') }} <!-- /mnrfy-common/js/script.js -->
{{ asset('images/logo.png') }} <!-- /mnrfy-common/images/logo.png -->
<!-- С версионированием -->
{{ asset('css/app.css', true) }} <!-- /mnrfy-common/css/app.css?v=1234567890 -->
<!-- Загруженные файлы -->
{{ upload('avatars/user123.jpg') }} <!-- /mnrfy-uploads/avatars/user123.jpg -->
URL и маршрутизация
{% set user = {
'id': 123,
'name': 'John Doe',
'email': 'john@example.com'
} %}
{% set product = {
'id': 456,
'name': 'Laptop Dell XPS',
'slug': 'laptop-dell',
'price': 1299.99
} %}
{% set app = {
'main_lang': 'en',
'langs': ['en', 'ru', 'de', 'fr']
} %}
{% set locale = 'ru' %}
<!-- Базовые маршруты -->
{{ route('home') }} <!-- / -->
{{ route('about') }} <!-- /about -->
{{ route('contact') }} <!-- /contact -->
<!-- Маршруты с параметрами -->
{{ route('user.profile', {'id': user.id}) }} <!-- /user/123/profile -->
{{ route('product.show', {'slug': product.slug}) }} <!-- /products/laptop-dell -->
{{ route('blog.post', {'year': 2024, 'month': 12, 'slug': 'new-article'}) }} <!-- /blog/2024/12/new-article -->
<!-- Маршруты с языковыми префиксами -->
{{ route_lang('home', 'ru') }} <!-- /ru если ru не основной язык -->
{{ route_lang('about', 'en') }} <!-- /about если en основной язык -->
{{ route_lang('product.show', 'de', {'slug': product.slug}) }} <!-- /de/products/laptop-dell -->
{{ route_lang('home', 'auto') }} <!-- Использует текущий язык -->
<!-- URL текущей страницы на других языках -->
{{ current_url_lang('en') }} <!-- Текущая страница на английском -->
{{ current_url_lang('ru') }} <!-- Текущая страница на русском -->
{{ current_url_lang('de') }} <!-- Текущая страница на немецком -->
<!-- Абсолютные URL с языком -->
{{ absolute_url_lang('/about', 'ru') }} <!-- https://domain.com/ru/about -->
{{ absolute_url_lang('/contact', 'en') }} <!-- https://domain.com/contact -->
<!-- Проверка текущего маршрута -->
{{ is_current_route('ProductShow') }} <!-- true/false по имени маршрута -->
{{ is_current_route('UserProfile') }} <!-- true/false -->
{{ is_current_route('BlogPost') }} <!-- true/false -->
<!-- Проверка текущего языка -->
{{ is_current_lang('ru') }} <!-- true/false -->
{{ is_current_lang('en') }} <!-- true/false -->
<!-- Получение всех языков с метаданными -->
{% set languages = get_languages() %}
{% foreach languages as lang %}
<a href="{{ lang.url }}"
class="{{ lang.is_current ? 'active' : '' }}">
{{ lang.name }} <!-- English, Русский, Deutsch, etc -->
{% if lang.is_main %}(Основной){% endif %}
</a>
{% endforeach %}
<!-- Простой переключатель языков -->
<div class="lang-switcher">
{% foreach app.langs as lang %}
<a href="{{ current_url_lang(lang) }}"
class="lang-item {{ is_current_lang(lang) ? 'active' : '' }}">
{{ lang }}
</a>
{% endforeach %}
</div>
<!-- Проверка необходимости показа языкового префикса -->
{% if should_show_lang_prefix() %}
<p>Текущий язык отличается от основного</p>
{% endif %}
<!-- Работа с ассетами -->
{{ asset('css/app.css') }} <!-- /mnrfy-common/css/app.css -->
{{ asset('js/script.js') }} <!-- /mnrfy-common/js/script.js -->
{{ asset('images/logo.png') }} <!-- /mnrfy-common/images/logo.png -->
<!-- Навигационное меню с языковой поддержкой -->
<nav class="language-nav">
{% foreach get_languages() as lang %}
<a href="{{ lang.url }}"
class="lang-link {{ lang.is_current ? 'current' : '' }}">
{{ lang.code | upper }}
{% if lang.is_main %}
<span class="main-lang-indicator">*</span>
{% endif %}
</a>
{% endforeach %}
</nav>
<!-- Хлебные крошки с языковой поддержкой -->
<nav class="breadcrumbs">
<a href="{{ route_lang('home', locale) }}">{{ t('nav.home') }}</a>
{% if is_current_route('ProductShow') %}
<span>></span>
<a href="{{ route_lang('products.index', locale) }}">{{ t('nav.products') }}</a>
<span>></span>
<span class="current">{{ product.name }}</span>
{% endif %}
</nav>
<!-- Главное меню с активными элементами -->
<ul class="main-menu">
<li class="{{ is_current_route('Home') ? 'active' : '' }}">
<a href="{{ route_lang('home', locale) }}">{{ t('menu.home') }}</a>
</li>
<li class="{{ is_current_route('ProductIndex') ? 'active' : '' }}">
<a href="{{ route_lang('products.index', locale) }}">{{ t('menu.products') }}</a>
</li>
<li class="{{ is_current_route('About') ? 'active' : '' }}">
<a href="{{ route_lang('about', locale) }}">{{ t('menu.about') }}</a>
</li>
<li class="{{ is_current_route('Contact') ? 'active' : '' }}">
<a href="{{ route_lang('contact', locale) }}">{{ t('menu.contact') }}</a>
</li>
</ul>
Функции авторизации и сессий
Пользователь
{% set loggedInUser = {
'id': 123,
'name': 'John Doe',
'email': 'john@example.com',
'role': 'admin',
'permissions': ['edit_users', 'delete_posts', 'admin_panel']
} %}
{% set guestUser = null %}
<!-- Текущий пользователь -->
{{ auth() }} <!-- Объект пользователя или null -->
{{ auth().name }} <!-- Имя пользователя -->
{{ auth_id() }} <!-- ID пользователя -->
<!-- Проверка авторизации -->
{% if auth() %}
<p>Добро пожаловать, {{ auth().name }}!</p>
{% else %}
<a href="/login">Войти</a>
{% endif %}
<!-- Проверка ролей -->
{{ user_has_role('admin') }} <!-- true/false -->
{{ user_has_role(['admin', 'moderator']) }} <!-- Любая из ролей -->
Права доступа
{% set user = {
'id': 123,
'name': 'John Doe',
'role': 'moderator',
'permissions': ['edit_users', 'moderate_comments', 'delete_posts']
} %}
<!-- Проверка прав -->
{{ can('edit_users') }} <!-- Может редактировать пользователей -->
{{ can('delete_posts') }} <!-- Может удалять посты -->
{{ cannot('admin_panel') }} <!-- Не может зайти в админку -->
<!-- Условное отображение -->
{% if can('moderate_comments') %}
<button class="btn-moderate">Модерировать</button>
{% endif %}
Сессии
{% set sessionData = {
'user_id': 123,
'cart_items': [
{'id': 1, 'name': 'Product 1', 'price': 25.99, 'quantity': 2},
{'id': 2, 'name': 'Product 2', 'price': 15.50, 'quantity': 1}
]
} %}
{% set flashMessages = {
'success': 'Ваш профиль обновлен успешно!',
'error': 'Возникла ошибка при обработке запроса.'
} %}
{% set oldInput = {
'email': 'user@example.com',
'name': 'John Doe'
} %}
<!-- Данные сессии -->
{{ session('user_id') }} <!-- Значение из сессии -->
{{ session('cart_items', []) }} <!-- Со значением по умолчанию -->
<!-- Flash сообщения -->
{{ flash('success') }} <!-- Сообщение об успехе -->
{{ flash('error') }} <!-- Сообщение об ошибке -->
<!-- Старые значения форм -->
{{ old('email') }} <!-- Предыдущее значение поля -->
{{ old('name', user.name) }} <!-- С fallback значением -->
Функции безопасности
CSRF защита
{% set csrf_token_value = 'a1b2c3d4e5f6g7h8i9j0' %}
<!-- CSRF токен -->
{{ csrf_token() }} <!-- Токен в виде строки -->
{{ csrf() }} <!-- HTML поле с токеном -->
<!-- В формах -->
<form method="POST" action="/users">
{{ csrf() }}
<!-- Остальные поля -->
</form>
<!-- Для AJAX -->
<meta name="csrf-token" content="{{ csrf_token() }}">
Хеширование и шифрование
{% set sensitive_data = "Это важная информация" %}
{% set email = "email@example.com" %}
<!-- Хеширование -->
{{ hash('sha256', sensitive_data) }} <!-- SHA256 хеш -->
{{ md5(email) }} <!-- MD5 хеш -->
<!-- Генерация уникальных ID -->
{{ uniqid() }} <!-- Уникальный ID -->
{{ uuid() }} <!-- UUID -->
Функции работы с БД
Подключение к базе
{% set dbConnId = '1752665380840' %}
{% set userId = 123 %}
<!-- Получение подключения -->
{% set database = db(dbConnId) %}
<!-- Простые запросы -->
{% set users = db(dbConnId)->getItems('users', {'active': 1}) %}
{% set user = db(dbConnId)->getItem('users', {'id': userId}) %}
{% set count = db(dbConnId)->countItems('users') %}
Сложные запросы
{% set dbConnId = '1752665380840' %}
{% set requestData = {'page': 2} %}
<!-- SQL запросы -->
{% set stats = db(dbConnId)->query('
SELECT COUNT(*) as total,
SUM(balance) as total_balance
FROM users
WHERE active = 1
') %}
<!-- Пагинация -->
{% set page = request.input('page', 1) %}
{% set users = db(dbConnId)->paginate('users', page, 20) %}
Функции переводов
Базовые переводы
{% set user = {
'name': 'John Doe',
'email': 'john@example.com'
} %}
{% set order = {
'id': 12345,
'total': 2599.99,
'status': 'paid'
} %}
<!-- Простые переводы -->
{{ t('welcome') }} <!-- Добро пожаловать -->
{{ t('menu.home') }} <!-- Главная -->
{{ t('user.profile') }} <!-- Профиль пользователя -->
<!-- С параметрами -->
{{ t('greeting', {'name': user.name}) }} <!-- Привет, :name! -->
{{ t('order.total', {'amount': order.total, 'currency': 'RUB'}) }}
Множественные формы
{% set message_count = 5 %}
{% set online_count = 12 %}
{% set users = [
{'name': 'John', 'notification_count': 1},
{'name': 'Alice', 'notification_count': 3},
{'name': 'Bob', 'notification_count': 0},
{'name': 'Mary', 'notification_count': 15}
] %}
<!-- Склонение по числительным -->
{{ t('messages.count', message_count) }} <!-- 5 сообщений -->
{{ t('users.online', online_count) }} <!-- 12 пользователей онлайн -->
<!-- В цикле -->
{% foreach users as user %}
<p>{{ user.name }} имеет {{ t('notifications.count', user.notification_count) }}</p>
{% endforeach %}
Языковые настройки
{% set locale = 'ru' %}
{% set available_locales = ['ru', 'en', 'de', 'fr', 'es'] %}
<!-- Текущий язык -->
{{ locale }} <!-- ru -->
{{ current_locale() }} <!-- ru -->
<!-- Доступные языки -->
{% foreach available_locales as lang %}
<a href="?lang={{ lang }}">{{ lang | upper }}</a>
{% endforeach %}
<!-- URL для другого языка -->
{{ current_url_lang('en') }} <!-- Текущая страница на английском -->
Функции HTTP запроса
Параметры запроса
{% set request = {
'input': {
'page': 2,
'search': 'laptop',
'filter': 'price_desc'
},
'query': {
'search': 'laptop'
},
'all': {
'page': 2,
'search': 'laptop',
'filter': 'price_desc'
},
'path': '/users/profile',
'method': 'GET'
} %}
<!-- GET параметры -->
{{ request.input('page', 1) }} <!-- Параметр page или 1 -->
{{ request.query('search') }} <!-- Поисковый запрос -->
{{ request.all() }} <!-- Все параметры -->
<!-- Информация о запросе -->
{{ request.path }} <!-- /users/profile -->
{{ request.method }} <!-- GET, POST, etc -->
{{ request.ip() }} <!-- IP адрес клиента -->
{{ request.userAgent() }} <!-- User-Agent -->
Проверки запроса
{% set request = {
'method': 'POST',
'isAjax': function() { return true; },
'isMobile': function() { return false; },
'isMethod': function(method) { return method === 'POST'; }
} %}
<!-- Проверка метода -->
{% if request.isMethod('POST') %}
<p>Данные были отправлены</p>
{% endif %}
<!-- AJAX запрос -->
{% if request.isAjax() %}
<!-- Упрощенный вывод для AJAX -->
{% endif %}
<!-- Мобильное устройство -->
{% if request.isMobile() %}
<!-- Мобильная версия -->
{% endif %}
Функции отладки
Вывод отладочной информации
{% set user = {
'id': 123,
'name': 'John Doe',
'email': 'john@example.com',
'role': 'admin'
} %}
{% set product = {
'id': 456,
'name': 'Laptop Dell XPS',
'price': 1299.99
} %}
{% set order = {
'id': 789,
'total': 1299.99,
'status': 'pending'
} %}
<!-- Дамп переменных -->
{{ dump(user) }} <!-- Отладочный вывод переменной -->
{{ dd(user, product, order) }} <!-- Die and dump -->
<!-- В режиме отладки -->
{% if debug() %}
<div class="debug-info">
{{ dump() }} <!-- Все переменные -->
</div>
{% endif %}
Производительность
{% set appConfig = {
'debug': true
} %}
<!-- Информация о производительности -->
{% if config('app.debug') %}
<div class="performance-info">
<p>Время выполнения: {{ execution_time() }}ms</p>
<p>Память: {{ memory_usage() }}</p>
<p>Пиковое использование: {{ memory_peak() }}</p>
</div>
{% endif %}
Системные переменные
Константы фреймворка
{% set MNRFY_ROOT = '/var/www/html/myproject' %}
{% set MNRFY_COMMON = '/var/www/html/myproject/mnrfy-common' %}
{% set MNRFY_UPLOADS = '/var/www/html/myproject/mnrfy-uploads' %}
{% set MNRFY_START_TIME = 1705330000.5678 %}
<!-- Пути к директориям -->
{{ MNRFY_ROOT }} <!-- Корень проекта -->
{{ MNRFY_COMMON }} <!-- mnrfy-common/ -->
{{ MNRFY_UPLOADS }} <!-- mnrfy-uploads/ -->
<!-- Информация о запуске -->
{{ MNRFY_START_TIME }} <!-- Время начала выполнения -->
{{ (microtime(true) - MNRFY_START_TIME) * 1000 | round(2) }}ms
Практические примеры
Навигационное меню
{% set auth_user = {
'id': 123,
'name': 'John Doe',
'email': 'john@example.com',
'role': 'admin',
'permissions': ['admin_panel', 'edit_users']
} %}
{% set current_route = 'home' %}
{% set is_current_route = function(route) {
return route === current_route;
} %}
{% set translations = {
'menu.home': 'Главная',
'menu.profile': 'Профиль',
'menu.admin': 'Админ-панель',
'menu.logout': 'Выход',
'menu.login': 'Вход',
'menu.register': 'Регистрация'
} %}
<nav class="main-nav">
<a href="{{ route('home') }}"
class="{{ is_current_route('home') ? 'active' : '' }}">
{{ t('menu.home') }}
</a>
{% if auth() %}
<a href="{{ route('profile') }}"
class="{{ is_current_route('profile') ? 'active' : '' }}">
{{ t('menu.profile') }}
</a>
{% if can('admin_panel') %}
<a href="{{ route('admin') }}">{{ t('menu.admin') }}</a>
{% endif %}
<a href="{{ route('logout') }}">{{ t('menu.logout') }}</a>
{% else %}
<a href="{{ route('login') }}">{{ t('menu.login') }}</a>
<a href="{{ route('register') }}">{{ t('menu.register') }}</a>
{% endif %}
</nav>
Форма с валидацией
{% set user = {
'id': 123,
'email': 'john@example.com',
'name': 'John Doe'
} %}
{% set old_values = {
'email': 'john.doe@example.com',
'name': 'Johnny Doe'
} %}
{% set flash_messages = {
'success': 'Профиль успешно обновлен!',
'errors': {
'email': 'Этот email уже используется другим пользователем'
}
} %}
{% set translations = {
'form.email': 'Email',
'form.name': 'Имя',
'button.save': 'Сохранить'
} %}
<form method="POST" action="{{ route('user.update') }}">
{{ csrf() }}
<div class="form-group">
<label>{{ t('form.email') }}</label>
<input type="email" name="email"
value="{{ old('email', user.email) }}" required>
{% if flash('errors.email') %}
<div class="error">{{ flash('errors.email') }}</div>
{% endif %}
</div>
<div class="form-group">
<labe