====== 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]], который создает итераторы на основе выборок из базы данных.