Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:packages:web_app:lmb_fetcher

lmbFetcher

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>.

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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ____   ____  _____   _  __  ____ 
  /  _/  / __/ / ___/  | |/_/ / __ \
 _/ /   / _/  / /__   _>  <  / /_/ /
/___/  /_/    \___/  /_/|_|  \___\_\
 
limb3_2007_2/ru/packages/web_app/lmb_fetcher.txt · Последнее изменение: 2010/11/10 10:02 — 127.0.0.1