====== lmbFetcher ====== lmbFetcher - это абстрактный класс для создания списковых контейнеров данных - итераторов (см. [[limb3_2007_2:ru:packages:datasource|описание пакета Datasource]]). lmbFetcher содержит публичные методы **getDataSet()** и **addDecorator($decorator, $params = array())**. Дочерние классы должны перекрывать закрытый метод **_createDataSet()**, например: class SomeFetcher extends lmbFetcher { protected function _createDataSet() { return new EmptyIterator(); } } lmbFetcher является унифицированным интерфейсом для создания именно итераторов, поэтому если вам нужно создать обычный контейнер с данными (например [[limb3_2007_2:ru:packages:datasource:lmbDataspace|lmbDataspace]]), придется создавать итератор с одним элементом, например: class SomeOtherFetcher extends lmbFetcher { protected function _createDataSet() { return new ArrayDataSet(array(array('city' => 'Moskow'))); } } Чаще всего lmbFetcher-ы используются для реализации [[PullView]] при помощи тега [[limb3_2007_2:ru:template_system:tags:lmb_fetch_tags:lmb_fetch_tag|]]. ===== Базовые lmbFetcher-ы ===== ^Класс^Назначение^ |[[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]], который создает итераторы на основе выборок из базы данных.