widefocus/feed-source

此包包含提供数据源模型的工具。

1.0.0 2017-04-27 08:43 UTC

This package is not auto-updated.

Last update: 2024-09-20 22:01:31 UTC


README

Build Status Latest Stable Version License

此包包含用于使用数据源的模型。

身份源

身份源提供身份信息。这通常是一个数据库中主键的列表。

<?php
use WideFocus\Feed\Source\IdentitySourceInterface;

/** @var IdentitySourceInterface $idSource */
$idSource  = new CustomIdSource();
$entityIds = $idSource->getEntityIds();

值源

值源为身份提供值。这些值针对单个属性进行检索。

<?php
use WideFocus\Feed\Source\ValueSourceInterface;

/** @var ValueSourceInterface $valueSource */
$valueSource = new CustomValueSource();
$names       = $valueSource->getEntityValues($entityIds, 'name');

源条件

可以通过条件过滤身份。条件根据身份决定是否将项目用于数据源。它通过自身收集项目数据,例如使用值源。

<?php
use WideFocus\Feed\Source\Condition\SourceConditionInterface;

/** @var SourceConditionInterface $condition */
$condition = new CustomCondition();
$condition->prepare($entityIds);
foreach ($entityIds as $entityId) {
    if ($condition->matches($entityId)) {
        // The entity is validated.
    }
}

使用 SourceConditionCombination 创建条件的组合。

源字段

源字段为数据源项目提供数据。它始终获取单个属性的数据。它可以自行获取数据,例如使用值源。

<?php
use WideFocus\Feed\Source\Field\SourceFieldInterface;

/** @var SourceFieldInterface $field */
$field = new CustomField();
$field->prepare($entityIds);

foreach ($entityIds as $entityId) {
    $item = new ArrayObject();
    $item->offsetSet(
        'name',
        $field->getValue($entityId)
    );
    // The name has been set on the item.
}

使用 SourceFieldCombinationInterface 创建字段的组合。

源迭代器

此包提供了一些迭代器,可以在源上应用条件和字段。

身份源迭代器

身份源迭代器遍历身份源中的值。

<?php
use WideFocus\Feed\Source\Iterator\IdentitySourceIterator;

$identityIterator = new IdentitySourceIterator($idSource);
foreach ($identityIterator as $identity) {
    // An identity.
}

验证身份迭代器

验证身份迭代器在遍历时根据条件验证身份。它只返回符合条件身份。

<?php
use WideFocus\Feed\Source\Condition\SourceConditionInterface;
use WideFocus\Feed\Source\Iterator\ValidatedIdentityIterator;

/** @var SourceConditionInterface $conditions */
$condition = new CustomCondition();

$validatedIterator = new ValidatedIdentityIterator(
    $identityIterator,
    $condition,
    500
);

foreach ($validatedIterator as $identity) {
    // A validated identity.
}

身份到项目迭代器

身份到项目迭代器在遍历时将身份转换为带有值的项。返回的项是 ArrayAccess 的实例。

<?php
use WideFocus\Feed\Source\Field\SourceFieldCombinationInterface;
use WideFocus\Feed\Source\Field\SourceFieldCombination;
use WideFocus\Feed\Source\Iterator\IdentityToItemIterator;

/** @var SourceFieldCombinationInterface $fields */
$fields = new SourceFieldCombination([]);

$idToItemIterator = new IdentityToItemIterator(
    $identityIterator,
    $fields,
    500
);

foreach ($idToItemIterator as $item) {
    // An item with values.
}

组合迭代器

可以使用源迭代器工厂创建组合迭代器。它返回一个迭代器,从身份源获取值,验证它们并将它们转换为带有值的项。

<?php
use WideFocus\Feed\Source\IdentitySourceInterface;
use WideFocus\Feed\Source\Condition\SourceConditionCombinationInterface;
use WideFocus\Feed\Source\Field\SourceFieldCombinationInterface;
use WideFocus\Feed\Source\Iterator\SourceIteratorFactory;

/** @var IdentitySourceInterface $idSource */
$idSource = new CustomSource();

/** @var SourceConditionCombinationInterface $conditions */
$conditions = new CustomConditionCombination();

/** @var SourceFieldCombinationInterface $fields */
$fields = new CustomFieldCombination();

$factory  = new SourceIteratorFactory(500);
$iterator = $factory->create(
    $idSource,
    $conditions,
    $fields
);

foreach ($iterator as $item) {
    // A validated item with values.
}