Часто на форуме у разработчиков компонентов возникает вопрос о взаимодействии контроллера и модели. Они не знают как правильно передать данные из контроллера в модель. Нет ничего проще - используйте состояние модели.
Предположим, что мы хотим получить какие-то данные из запроса и использовать их в модели. Можно получить эти данные напрямую из модели, но в парадигме MVC модель должна быть изолирована от внешнего окружения, поэтому такой способ не очень хорош.
В Joomla для этого есть более подходяший способ - состояние модели. По сути, состояние модели - это своеобразное хранилище временных данных, которые не относятся непосредственно к классу модели, но нужны ей для совершения определенных операций в определенный момент времени. Состояние модели в Joomla представляет собой объект, работа с которым осуществляется с помощью двух методов класса JModelLegacy:
- getState($property = null, $default = null) - получение значения свойства из состояния, а если свойство не найдено, вторым параметром можно передать его значение по умолчанию. Если вызвать метод без параметров, то будет возвращен объект состояния.
- setState($property, $value = null) - установка значения свойства в состояние
Применительно к контроллеру это выглядит следующим образом:
// Получаем данные из запроса $var = $this->input->get('data'); // Передаем данные в модель $model = $this->getModel(); $model->setState('data', $var);
Далее в модели получаем эти данные:
$var = $this->getState('data', 'state test');
Кстати, состояние модели можно легко получить в представлении. Думаю, что вам знакома эта строка:
$state = $this->get('State');
Удачной разработки!