Структура проекта MNRFY
Подробное описание структуры директорий и файлов фреймворка
Обзор структуры
- / # Корневая директория проекта
- ├── mnrfy-engine/ # Ядро фреймворка (не изменять!)
- ├── mnrfy-common/ # Общие ресурсы (CSS, JS, изображения)
- ├── mnrfy-temp/ # Временные файлы и кеш
- ├── mnrfy-uploads/ # Загруженные пользователями файлы
- ├── src/ # Исходный код приложения
- │ ├── config/ # Конфигурационные файлы
- │ ├── translations/ # Файлы переводов
- │ ├── components/ # Переиспользуемые компоненты
- │ ├── layouts/ # Макеты страниц
- │ ├── handlers/ # Обработчики форм
- │ └── *.html # Шаблоны страниц
- ├── .htaccess # Конфигурация Apache
- ├── index.php # Входная точка приложения
- └── README.md # Документация проекта
Детальное описание директорий
📁 mnrfy-engine/
Внимание! Никогда не изменяйте файлы в этой директории. Все изменения будут потеряны при обновлении фреймворка.
Содержит ядро фреймворка:
Core/- основные классы фреймворкаDatabase/- классы для работы с БДTemplate/- шаблонизаторTranslation/- система переводовHttp/- обработка HTTP запросовCache/- система кеширования
📁 mnrfy-common/
Публичные статические ресурсы который почти никогда не будут изменяться например фоновое видео лендинга и тд, которые нет смысла хранить в снапшотах из-за их больших размеров!
Доступ к файлам из шаблонов:
<a href="{{ asset('video.mp4') }}">
📁 mnrfy-temp/
Временные файлы и кеш:
cache/- кеш шаблонов и данныхlogs/- логи приложенияsessions/- файлы сессийcompiled/- скомпилированные шаблоны
Совет: Эта директория должна быть доступна для записи веб-сервером.
📁 mnrfy-uploads/
Загруженные пользователями файлы:
mnrfy-uploads/
├── avatars/ # Аватары пользователей
├── documents/ # Документы
├── images/ # Изображения
└── temp/ # Временные загрузки
Доступ к загруженным файлам:
<img src="/mnrfy-uploads/avatars/{{ user.avatar }}">
📁 src/
Основная директория вашего приложения:
📁 src/__router.json
Файл маршрутизатор!
Пример __router.json:
[
{
"file": "test.html",
"name": "Test",
"pin": "",
"url": "",
"isHome": true
},
{
"file": "post.html",
"name": "Test",
"pin": "",
"url": "post-{post_id}"
}
]
📁 src/config/
| Файл | Описание |
|---|---|
app.json |
Основная конфигурация приложения |
database.json |
Настройки подключения к БД |
Пример app.json:
{
"name": "alfa.box",
"domain": "alfa.box",
"main_lang": "ru",
"langs": [
"ru"
],
"csrf": true,
"session": true,
"debug": true,
"timezone": "UTC",
"translation": {
"cookie_save": true,
"cookie_timelife": 3600,
"cookie_name": "mnrfy_locale"
},
"limits": {
"upload_max_size": "20M",
"request_timeout": 30,
"max_requests_per_second": 7,
"max_requests_per_minute": 100
}
}
📁 src/translations/
Файлы переводов для каждого языка:
translations/
├── ru.json
└── en.json
Пример файла перевода ru/app.json:
{
"welcome": "Добро пожаловать, :user",
"menu": {
"home": "Главная",
"about": "О нас",
"contact": "Контакты"
},
"user": {
"profile": "Профиль пользователя",
"settings": "Настройки",
"logout": "Выход"
}
}
📁 src/components/
Переиспользуемые компоненты:
<!-- components/alert.html -->
<div class="alert alert-{{ type ?? 'info' }}">
{{ message }}
</div>
<!-- Использование -->
{% component 'alert' with {'type': 'success', 'message': 'Сохранено!'} %}
📁 src/layouts/
Макеты для наследования:
<!-- layouts/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
{% block styles %}{% endblock %}
</head>
<body>
{% block content %}{% endblock %}
{% block scripts %}{% endblock %}
</body>
</html>
<!-- Использование в странице -->
{% extends 'layouts/base.html' %}
{% block title %}Главная страница{% endblock %}
{% block content %}
<h1>Добро пожаловать!</h1>
{% endblock %}
📁 src/handlers/
PHP обработчики для форм:
<?php
// handlers/contact-form.php
return function($request, $response, $context) {
$name = $request->input('name');
$email = $request->input('email');
$message = $request->input('message');
// Валидация
if (empty($name) || empty($email) || empty($message)) {
return [
'success' => false,
'error' => 'Заполните все поля'
];
}
// Обработка
// ...
return [
'success' => true,
'message' => 'Сообщение отправлено!'
];
};
?>
📁 src/*.html
Шаблоны страниц - основные файлы вашего приложения:
index.html- главная страницаabout.html- страница "О нас"contact.html- контактыuser-profile.html- профиль пользователя- и т.д.
📁 src/*.css/*.js и тд
Нужные для Вашей верстки файлы:
srcstyle/css/styles.css- Стили общиеsrc/images/1.png- Картинка
Соглашения об именовании
Файлы шаблонов
- Используйте
kebab-case:user-profile.html - Компоненты начинайте с типа:
modal-confirm.html - Макеты в папке
layouts/:layouts/admin.html
Обработчики
- Используйте
kebab-case:user-register.php - Добавляйте суффикс по типу:
contact-form.php
Конфигурационные файлы
- Всегда в формате JSON
- Используйте
snake_caseдля ключей
Лучшие практики
- Разделение логики - держите бизнес-логику в обработчиках, а представление в шаблонах
- Переиспользование - создавайте компоненты для повторяющихся элементов
- Наследование - используйте макеты для общей структуры страниц
- Локализация - всегда используйте функцию
t()для текстов - Безопасность - никогда не выводите пользовательские данные через
{!! !!}
Готовы создавать? Переходите к изучению основ шаблонизатора.