lmbFetcher - это абстрактный класс для создания списковых контейнеров данных - итераторов (см. описание пакета Datasource).
lmbFetcher содержит публичные методы getDataSet() и addDecorator($decorator, $params = array()). Дочерние классы должны перекрывать закрытый метод _createDataSet(), например:
class SomeFetcher extends lmbFetcher { protected function _createDataSet() { return new EmptyIterator(); } }
lmbFetcher является унифицированным интерфейсом для создания именно итераторов, поэтому если вам нужно создать обычный контейнер с данными (например lmbDataspace), придется создавать итератор с одним элементом, например:
class SomeOtherFetcher extends lmbFetcher { protected function _createDataSet() { return new ArrayDataSet(array(array('city' => 'Moskow'))); } }
Чаще всего lmbFetcher-ы используются для реализации PullView при помощи тега <fetch>.
| Класс | Назначение |
|---|---|
| lmbQueryBasedFetcher | Используется для осуществления выборок из базы данных. |
| lmbSimpleFetcher | Используется для явного создания объекта, реализующего интерфейс итератора. |
| lmbTableRecordsFetcher | Используется для осуществления выборок из определенной таблицы базы данных. Наследуется от lmbQueryBasedFetcher |
| lmbTableRowFetcher | Используется для создания итератора с одним элементом, который соответствует определенной записи таблицы с определенным идентификатором. Идентификатор передается в fetcher непосредственно из шаблона. |
lmbFetcher содержит метод для добавления декораторов addDecorator($decorator, $params = array()), например:
class CatalogFolderFetcher extends lmbFetcher { protected function _createDataSet() { $fetcher = new lmbQueryBasedFetcher('CatalogFolderQuery'); $fetcher->addDecorator('lmbJIPAssigner', array('group_name' => 'main', 'path' => '/catalog', 'service_name' => 'Catalog')); return $fetcher->getDataSet(); } }
JipAssigner - это декоратор итератора. Второй параметр метода addDecorator - это массив свойств, которые добавляются к декоратору. Каждый параметр преобразуется в метод вида setParamName($value). Поэтому вышеуказанный код эквивалентен следующему:
class CatalogFolderFetcher extends lmbFetcher { protected function _createDataSet() { $fetcher = new lmbQueryBasedFetcher('CatalogFolderQuery'); $iterator = $fetcher->getDataSet(); $decorated = new lmbJIPAssigner($iterator); $decorated->setGroupName('main'); $decorated->setPath('/catalog'); $decorated->setServiceName('Catalog'); return $decorated; } }
Здесь использован также класс lmbQueryBasedFetcher, который создает итераторы на основе выборок из базы данных.