Общие принципы моделей
Модель в MV представляет собой PHP класс и SQL таблицу, управляемую данным классом.
Основные правила создания модели:
- Название php класса должно начинаться с названия модели, например: pages.model.php, gallery_main.model.php.
- Файлы классов моделей должны находиться в папке models в корне проекта.
- Класс модели должен быть унаследован от класса Model.
- Класс модели должен иметь свойство $name, которое является названием модели.
- Класс модели должен иметь свойство $model_elements, которое является массивом полей данной модели, аналогично полям в таблице базы данных.
- В основе задания полей в свойстве $model_elements модели стоят типы данных.
- SQL таблица модели должна иметь тоже название что и класс модели в нижнем регистре pages, gallery_main. Таблицы создаются при помощи миграций.
- Названия полей в таблице должны совпадать с полями модели в массиве $model_elements, название поля в SQL таблице является третьим по счету элементом массива параметров.
- Для активации модель должна быть прописана в файле config/models.php, в данном файле название класса модели должно быть добавлено в массив активных моделей, после чего модель станет доступна в административном интерфейсе и на публичной части сайта.
$mvActiveModels = [
'Pages', 'Blocks', 'Seo', 'GalleryMain'
];
Пример самой простой модели
PHP класс Hello должен находиться в файле models/hello.model.php.
class Hello extends Model
{
protected $name = 'Привет мир';
protected $model_elements = [
['Название', 'char', 'name']
];
}
При установке MV в нем находятся 3 предустановленные модели:
- Pages - страницы меню
- Blocks - текстовые блоки
- SEO - данные для seo оптимизации
База данных уже содержит необходимые таблицы для данных моделей. Таблица pages имеет несколько записей для приветственных страниц.
Модель Seo в отличии от Pages и Blocks представляет собой простую модель, данные которой представляют собой пару ключ - значение. Подробнее о данном типе моделей читайте в разделе Простые модели.
Ниже приведены 3 модели, связанные между собой внешними ключами.
Новости
class News extends Model
{
protected $name = 'Новости';
protected $model_elements = [
['Название', 'char', 'name', ['required' => true]],
['Раздел', 'enum', 'type', ['values_list' => ['economy' => 'Экономика',
'sport' => 'Спорт',
'culture' => 'Культура']]],
['Дата', 'date', 'date'],
['Активен', 'bool', 'active'],
['Текст', 'text', 'content', ['rich_text' => true]],
['Комментарии', 'many_to_one', 'comments', [
'related_model' => 'NewsComments',
'name_field' => 'author']]
];
}
Комментарии к новостям
class NewsComments extends Model
{
protected $name = 'Комментарии к новостям';
protected $name_field = 'author';
protected $model_elements = [
['Автор', 'enum', 'author', ['foreign_key' => 'Authors', 'name_field' => 'email']],
['Дата', 'date_time', 'date'],
['Новость', 'enum', 'news_id', ['foreign_key' => 'News']],
['Текст', 'text', 'content']
];
}
Авторы комментариев
class Authors extends Model
{
protected $name = 'Авторы комментариев';
protected $model_elements = [
['Email', 'email', 'email', ['required' => true, 'unique' => true]],
['Пароль', 'password', 'password'],
['Комментарии', 'many_to_one', 'comments', [
'related_model' => 'NewsComments',
'name_field' => 'date']],
['Фотографии', 'multi_images', 'pictures'],
['О себе', 'text', 'about']
];
}
Предыдущий раздел
Отладка