Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:controllers:model

Работа с моделью

На этой странице рассмотрена только работа с моделью из контроллера, то есть ее подключение и вызов методов. Внутреннее устройство самой модели рассмотрено в соответствующем разделе.

Подключение собственной модели

При вызове контроллера компонент автоматически определяет наличие собственной модели. В случае если она обнаружена создается объект:

$this->model

Этот объект создается автоматически при запуске контроллера и доступен из любых его методов, а так же из экшенов расположенных в отдельных файлах.

Пример использования модели внутри контроллера:

$latest_posts = $this->model->orderBy('date_pub', 'desc')->limit(10)->getPosts();

Подключение чужой модели

Контроллер также может использовать модель другого компонента.

Для получения экземпляра чужой модели служит статический метод ядра cmsCore::getModel(). В качестве аргумента ему передается название компонента, чью модель необходимо получить.

Например, чтобы получить модель компонента users:

// Получаем модель компонента users
$users_model = cmsCore::getModel('users');
 
// Получаем данные из модели
$users = $users_model->getUsers();

В версиях InstantCMS выше 2.8.2, можно использовать обращением к динамическим свойствам $this→model_CONTROLLER_NAME, где CONTROLLER_NAME название требуемого контроллера, к модели которого нужно подключиться. Пример выше можно переписать вот так:

// Получаем данные из модели users
$users = $this->model_users->getUsers();

Обратите внимание! Подобные вызовы доступны из контекста контроллера, т.е. из его фронтэнда, бэкенда и экшенов.

Наследование чужой модели

Вы можете класс своей модели наследовать от других доступных контроллеров (по умолчанию все модели наследуются от cmsModel) или вовсе использовать модель чужого контроллера как основную, через свойство $this→model.

Для этого в своём контроллере вы должны определить свойство $outer_controller_model:

class mycontroller extends cmsFrontend {
    protected $outer_controller_model = 'content';
}

В этом случае движок, если своей модели у контроллера нет, подключит модель контроллера content, которая будет доступна через свойство $this→model. Если же есть своя модель, то логичным при такой конструкции, что она наследуется от модели контроллера content, в противном случае это не имеет смысла.

Можно подключать несколько моделей, если у вас цепочка наследования:

class mycontroller extends cmsFrontend {
    protected $outer_controller_model = ['content', 'other_controller'];
}

например, модель mycontroller наследуется от other_controller, а та, в свою очередь от модели контроллера content.


К оглавлению раздела "Контроллеры"


К оглавлению раздела "Модели"


К оглавлению документации для разработчиков

dev/controllers/model.txt · Последние изменения: 08.05.2020 20:35 — fuze