Архитектура
Типы данных
В основе архитектуры MV лежат типы данных для моделей и форм, среди которых имеются как типичные для программирования (строковый, целочисленный и пр.), так и специальные для более удобной работы (файлы, изображения, массивы изображений, группа).
Все типы данных имеют под собой поля в SQL таблице за исключением типа 'многие ко многим' (для него создается связующая таблица), а также 'многие к одному', который представляет собой обратный подсчет записей по внешнему ключу. Типам присваиваются специальные атрибуты, задающие особые настройки для данного поля.
Для создания поля в модели или форме нужно заполнить массив из 3 обязательных параметров и одного необязательного:
- Текстовое название поля.
- Тип данных.
- Название поля в SQL таблице.
- Массив дополнительных параметров, опционально.
['Активация', 'bool', 'active'],
['Название', 'char', 'name', ['required' => true]],
['Альбом', 'enum', 'album', ['foreign_key' => 'Albums', 'empty_value' => true]],
['Рейтинг', 'float', 'rating'],
['Позиция', 'order', 'order'],
['Изображение', 'image', 'image', ['required' => true]]
Модели и шаблоны
Основными компонентами MV являются модели - классы для управления данными в SQL таблицах и шаблоны - PHP файлы для генерации HTML кода. Модель состоит из нескольких типов данных, которые внутри модели взаимодействуют в виде объектов друг с другом и с другими моделями. На основании полей модели автоматически строится административный интерфейс.
class News extends Model
{
protected $name = 'Новости';
protected $model_elements = [
['Активация', 'bool', 'active', ['on_create' => true]],
['Дата', 'date', 'date', ['required' => true]],
['Название', 'char', 'name', ['required' => true]],
['Новость', 'text', 'content', ['rich_text' => true]],
['Комментарии', 'many_to_one', 'comments', ['related_model' => 'Comments']]
];
public function display()
{
$rows = $this -> select(['active' => 1, 'order->desc' => 'date']);
$html = '';
foreach($rows as $row)
{
$html .= '<h2>'.$row['name'].'</h2>';
$html .= '<p>Дата: <span>'.I18n::formatDate($row['date']).'</span></p>';
$html .= '<p>'.$row['content'].'</p>';
}
return $html;
}
}
В качестве шаблонизатора выступает PHP, файлы шаблонов расположенные в специальной папке и подключаются в результате обработки маршрутизатором переданного URL. В шаблоне происходит поиск нужных записей из SQL таблиц, а также вызов методов модели для отображения данных.
<div id='content'>
<h1><? echo $record -> name; ?></h1>
<div class='date'><? echo I18n::formatDate($record -> date); ?></div>
<? echo $record -> content; ?>
</div>
Маршрутизация
Подключение нужного шаблона (view) осуществляется при помощи маршрутизации на основе переданного URL. Запрошенный URL разделяется на части и анализируется маршрутизатором, после чего происходит подключение шаблона. При анализе URL не применяются регулярные выражения, для увеличения производительности происходит сравнение с типовыми шаблонами, описанными в разделе Общие принципы шаблонов.
Шаблон подключается в любом случае, даже если совпадений не найдено, будет подключен шаблон по умолчанию (fallback), из которого можно вызвать 404 ошибку.
// Файл config/routes.php
'/' => 'view-index.php',
'e404' => 'view-404.php',
'fallback' => 'view-default.php',
'/contacts' => 'view-contacts.php',
'/user/login' => 'client/view-login.php',
'/news/*' => 'view-news.php',
'/payment/success/?' => 'view-pay-success.php'
Формы
Формы создаются на основе типов данных. Также, можно создавать формы на основе моделей, используя уже созданную структуру полей. MV располагает инструментами для валидации полей формы, вывода полей и их ошибок, компоновки сообщений, быстрого создания записей в SQL таблицах на основе данных формы.
//Форма из модели
$form = new Form('News');
//Форма из массива полей
$fields = [
['Имя', 'char', 'name', ['required' => true]],
['Email', 'email', 'email', ['required' => true]],
['Телефон', 'phone', 'phone'],
['Вопрос', 'text', 'question', ['required' => true]]
];
$form = new Form($fields);
<form method='post' action='<? echo $mv -> root_path; ?>form'>
<? echo $form -> display(); ?>
<button>Отправить</button>
</form>
Административная панель
В состав MV входит административная панель, которая автоматически создает интерфейс для управления моделями. Все активные модели имеют свой раздел в административной панели, через который можно создавать, редактировать и удалять записи.
Следующие компоненты входят в состав административной панели:
- списки всех записей модели
- управление записями (CRUD)
- удаление в корзину с возможностью восстановления
- поиск (фильтрация) записей по всем полям
- массовые операции с записями
- история изменений всех полей каждой записи
- администраторы с возможностью разграничения прав
- история операций администраторов
- файловый менеджер