Сэрвісы і кантракты выканання
Гэтыя пункты ўваходу падтрымліваюць праграмную генерацыю, рэгістрацыю стужак, інтэграцыю з планіроўшчыкам, пераўтварэнне скалярных значэнняў і неабавязковыя палі.
GeneratorService
DragonCode\LaravelFeed\Services\GeneratorService генеруе і публікуе адну стужку.
public function feed(Feed $feed, ?OutputStyle $output = null): GenerationResultData
Метад публікуе ўсе часткі як адну аперацыю, абнаўляе час апошняй актыўнасці рэгістрацыі, адпраўляе падзеі жыццёвага цыкла і вяртае шляхі з колькасцю запісаў у кожным файле. Вызначэнне сховішча і атрыманне шляху вываду адбываюцца да пачатку генерацыі. Для звычайнай стужкі выключэнні падчас гэтай папярэдняй праверкі, у тым ліку UnsupportedStorageDiskException, выкідваюцца непасрэдна. Для наладжанай стужкі, якая рэалізуе HasFeedTargets, памылкі папярэдняй праверкі абгортваюцца ў FeedGenerationException, каб ключ мэты заставаўся даступным. Пасля паспяховай папярэдняй праверкі памылкі генерацыі абгортваюцца для кожнай стужкі, а зыходнае выключэнне захоўваецца як папярэдняе.
Атрымлівайце сэрвіс праз кантэйнер Laravel, а не стварайце яго ўнутраныя залежнасці ўручную.
use App\Feeds\UserFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
$result = app(GeneratorService::class)->feed(app(UserFeed::class));
foreach ($result->records as $path => $count) {
processFeedResult($path, $count);
}
GeneratorService генеруе адну наладжаную стужку і не пералічвае мэты. Пры непасрэдным выкліку спачатку вызначце мэту:
use App\Feeds\PartnerFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
use RuntimeException;
$feed = app(PartnerFeed::class);
$target = $feed->findTarget('42')
?? throw new RuntimeException('Feed target [42] not found.');
$result = app(GeneratorService::class)->feed(
$feed->forTarget($target),
);
FeedQuery
DragonCode\LaravelFeed\Queries\FeedQuery кіруе захаванымі рэгістрацыямі стужак.
| Метад | Вынік |
|---|---|
| `create(string $class, string $title, Expression | string $expression = '0 * * * *', bool $isActive = true, array $extra = []): Feed` |
find(int $id): Feed | Вяртае рэгістрацыю або кідае FeedNotFoundException. |
all(): Builder | Вяртае ўсе рэгістрацыі, упарадкаваныя па ідэнтыфікатары. |
active(): Builder | Вяртае актыўныя рэгістрацыі, упарадкаваныя па ідэнтыфікатары. |
setLastActivity(string $class): void | Абнаўляе last_activity для класа стужкі. |
delete(int $id): void | Мякка выдаляе рэгістрацыю па ідэнтыфікатары. |
deleteByClass(string $class): void | Канчаткова выдаляе рэгістрацыі класа, у тым ліку раней выдаленыя. |
restore(int $id): void | Аднаўляе мякка выдаленую рэгістрацыю. |
$expression прымае звычайны радок з выразам cron, у тым ліку псеўданімы накшталт @daily, якія падтрымлівае dragonmantank/cron-expression, або DragonCode\LaravelFeed\Scheduling\Expression. Аб'екты з ланцужковымі выклікамі пераўтвараюцца ў радок cron да праверкі і захавання. Пры чытанні мадэлі вяртаецца захаваны радок. Прыклад прыведзены ў раздзеле «Выраз пры рэгістрацыі».
Для звычайных змяненняў рэгістрацыі выкарыстоўвайце згенераваную міграцыю або аперацыю разгортвання, каб іх можна было паўтарыць у кожным асяроддзі.
ScheduleFeedHelper
DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper::register() дадае актыўныя рэгістрацыі ў планіроўшчык Laravel. Кожная рэгістрацыя выкарыстоўвае захаваны выраз cron і блакіроўку перакрыцця. Фонавае выкананне і час жыцця блакіроўкі задаюцца ў feeds.schedule.
Калі наладжаная табліца стужак не існуе, рэгістрацыя бяспечна прапускаецца.
Transformer
Рэалізуйце DragonCode\LaravelFeed\Contracts\Transformer, каб пераўтвараць падтрыманыя значэнні перад серыялізацыяй.
public function allow(mixed $value): bool
public function transform(mixed $value): string
allow() вызначае, ці прымае пераўтваральнік значэнне. transform() вяртае яго скалярнае прадстаўленне. Дадайце клас праз Feed::transformers() або feeds.transformers.
OptionalData
Вяртайце новы DragonCode\LaravelFeed\Data\OptionalData для поля, якое трэба прапусціць пры адсутнасці значэння. XML, RSS, JSON і JSON Lines прапускаюць яго. CSV захоўвае слупок і запісвае пустое поле.