Каковы различия между типами моделей Joomla?

Я пытаюсь разобраться с мощью фреймворка Joomla (3.x).

Я заметил, что существует несколько типов моделей, которые можно использовать в компоненте:


JModelAdmin

Прототип административной модели. Действует как класс Factory для конкретных объектов приложения и предоставляет множество вспомогательных функций API.

JModelLegacy

Базовый класс для модели Joomla Действует как класс Factory для конкретных объектов приложения и предоставляет множество вспомогательных функций API.

JModelList

Класс модели для обработки списков элементов. Действует как класс Factory для конкретных объектов приложения и предоставляет множество вспомогательных функций API.

JModelForm

Модель формы прототипа. Действует как класс Factory для конкретных объектов приложения и предоставляет множество вспомогательных функций API.

JModelItem

Модель предмета-прототипа.


Я понимаю, что JModelLegacy кажется базовым классом. Мои модели расширяли JModelLegacy по умолчанию, однако мне было интересно, могу ли я потенциально использовать преимущества других классов.

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


person Sean    schedule 11.02.2014    source источник


Ответы (1)


Во-первых, все классы доступны для изучения кода в разделе:

\libraries\legacy\model\

Классы

Также важно понимать, что эти классы следует использовать (вообще говоря) в сочетании с соответствующими контроллерами: JControllerLegacy, JControllerForm и JControllerAdmin.

JModelLegacy — это базовый класс для модели Joomla (модель как в MVC). В основном он будет работать как класс Factory, инициализируя объект драйвера базы данных и объект таблицы.

Возможно, вам захочется расширить этот класс, если вы просто хотите выполнять некоторые базовые SQL-запросы (любая работа с JDatabase) и писать другую бизнес-логику.

Все модели будут расширяться JModelLegacy.


JModelList — класс для обработки списков элементов. Он обеспечивает пагинацию и фильтрацию. Практически везде, где вы отображаете список элементов, вы можете использовать JModelList. Все основные компоненты полагаются на JModelList.

Пример JModelLegacy


JModelForm и JModelAdmin обычно связаны с формами. Формами могут быть форма регистрации пользователя или форма создания и редактирования записи. Формы в Joomla определяются в файлах XML. JModelForm загрузит эти файлы как объекты JForm, загрузит данные формы, предварительно обработает форму и проверит ее.

Это один из самых мощных классов, которые вы можете использовать. Они сделают тяжелую работу. Если вам не нравится определенное поведение, вы можете переопределить его, внедрив собственный код.

JModelAdmin добавляет в форму некоторые дополнительные функции администратора:

  • выполнять пакетные операции над записями.
  • будет выполнять проверки ACL для записей.

JModelAdmin обычно используется при редактировании записи или для пакетных операций, особенно в бэкенде.


JModelItem - вряд ли он вам понадобится. Он предоставляет только метод getStoreId() и два свойства. Вам не понадобится этот класс, если только в качестве именования вместо использования JModelLegacy вы не захотите расширить его при выполнении чего-то базового, например, при отображении записи. (мое личное понимание вещей).


Заключение: Выше приведено общее введение в эти классы, как я их вижу. Я предлагаю подробно изучить, как Joomla их использует, какие методы доступны и как их использовать. Это очень мощные классы, и особенно для операций CRUD они помогут вам выполнить всю тяжелую работу. После того, как вы поймете, что они делают, вы сможете использовать их и переопределять, когда это необходимо.

person Valentin Despa    schedule 11.02.2014
comment
Это освежающе проницательный ответ! Вне рамок вопроса, рекомендуется ли тогда использовать две модели для каждой сущности в административной области? Один для редактирования конкретной записи, а другой для перечисления всех записей? - person Sean; 12.02.2014
comment
Да, две модели. Вы также, вероятно, захотите иметь два контроллера. Как рекорд и рекорды. Проще говоря: отредактируйте одну запись => JModelAdmin; просмотреть несколько записей => JModelList. - person Valentin Despa; 12.02.2014