В приложении MVC модель отвечает за взаимодействие с данными и передачу их контроллеру. То же самое и в Invision Community.
Вообще говоря, экземпляр модели относится к предмету. Например, если бы у вас были форумы и темы, Форум был бы модель, как и Тема. Модель для каждого из них предоставляет методы, позволяющие взаимодействовать с ними. При разработке моделей для вашего приложения перечислите, с чем работает ваше приложение, - это, скорее всего, и будут ваши модели.
Название и местоположение
Название модели всегда должно быть существительным в единственном числе; то есть модель всегда относится к одной вещи. Названия моделей так же должны быть в формате PascalCase.
Модели расположены в директории /sources вашего приложения. Как обсуждалось в документе Автозагрузка классов, в этой директории должны быть подпапку с таким же названием, как и ваша модель, а сама модель должна находится в данной поддиректории (вместе с любыми поддерживающими модулями).
- /sources/topic/topic.php - некорректно: директория/модель в нижнем регистре.
- /sources/Topics/Topics.php - некорректно: множественное имя модели
- /sources/Topic/Topic.php - Корректно
Еще раз обращаясь к руководству по автозагрузке, имя класса в файле PHP должно иметь префикс с подчеркиванием. Например, если ваш файл был назван Topic.php, класс модели, который он содержит, должен называться _Topic.
Базовые модели
Существует несколько базовых моделей, которые часто будут расширять ваши модели. Каждый из них будет рассмотрен более подробно - включая полный обзор методов, которые они предоставляют - в соответствующих разделах в этой документации. Базовыми являются:
- \IPS\Node\Model - Методы для работы с нодами, древовидная структура, применимая для категорий (и многое другое).
- \IPS\Content\Item - Методы для работы с элементами контента, например, темы, изображения галереи.
- \IPS\Content\Comment - Методы для работы с комментариями (включая сообщения форумов).
- \IPS\Content\Review - Методы для работы с отзывами.
Эти четыре базовые модели реализуют паттерн Active Record в Invision Community.
Пример: /exampleApp/sources/Counter/Counter.php
Очень простая автономная модель, которая предоставляет метод для хранения и увеличения числа.
<?php namespace IPS\exampleApp; class _Counter { protected $counter = 0; public function incrementCounter () { $this->counter++; } }
/exampleApp/modules/front/example/index.php
Контроллер, который создает экземпляр вышеуказанной модели, затем вызывает метод incrementCounter, который он предоставляет.
namespace IPS\exampleApp\modules\front\example;
class _index extends \IPS\Dispatcher\Controller
{
public function manage()
{
$myCounter = new \IPS\exampleApp\Counter();
$myCounter->incrementCounter();
}
}