Структура проекта 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/

Внимание! Никогда не изменяйте файлы в этой директории. Все изменения будут потеряны при обновлении фреймворка.

Содержит ядро фреймворка:

📁 mnrfy-common/

Публичные статические ресурсы который почти никогда не будут изменяться например фоновое видео лендинга и тд, которые нет смысла хранить в снапшотах из-за их больших размеров!

Доступ к файлам из шаблонов:

<a href="{{ asset('video.mp4') }}">

📁 mnrfy-temp/

Временные файлы и кеш:

Совет: Эта директория должна быть доступна для записи веб-сервером.

📁 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

Шаблоны страниц - основные файлы вашего приложения:

📁 src/*.css/*.js и тд

Нужные для Вашей верстки файлы:

Соглашения об именовании

Файлы шаблонов

Обработчики

Конфигурационные файлы

Лучшие практики

  1. Разделение логики - держите бизнес-логику в обработчиках, а представление в шаблонах
  2. Переиспользование - создавайте компоненты для повторяющихся элементов
  3. Наследование - используйте макеты для общей структуры страниц
  4. Локализация - всегда используйте функцию t() для текстов
  5. Безопасность - никогда не выводите пользовательские данные через {!! !!}
Готовы создавать? Переходите к изучению основ шаблонизатора.