Атрыбуты канфігурацыі
Выкарыстоўвайце PHP-атрыбуты з DragonCode\LaravelFeed\Attributes, каб наладзіць канвертар стужкі і фармат дат яе элементаў, не змяняючы налады ўсёй праграмы.
| Атрыбут | Да чаго дадаць | Ці можна паўтараць |
|---|---|---|
Config(string $name, mixed $value) | Клас Feed | Так |
DateFormat(string $format) | Клас FeedItem | Не |
Абодва атрыбуты прызначаныя для класаў. Імпартуйце іх з прасторы імёнаў пакета; Illuminate\Container\Attributes\Config — асобны атрыбут Laravel, які выкарыстоўваецца ўнутры канструктараў канвертараў.
Атрыбут Config
Дадайце адзін #[Config] для кожнай налады канвертара. Гэтая CSV-стужка выкарыстоўвае коску як раздзяляльнік і заканчэнні радкоў Windows:
namespace App\Feeds;
use App\Feeds\Items\UserFeedItem;
use App\Models\User;
use DragonCode\LaravelFeed\Attributes\Config;
use DragonCode\LaravelFeed\Enums\FeedFormatEnum;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
#[Config('delimiter', ',')]
#[Config('lineEnding', "\r\n")]
class UserCsvFeed extends Feed
{
protected FeedFormatEnum $format = FeedFormatEnum::Csv;
public function builder(): Builder
{
return User::query();
}
public function item(Model $model): FeedItem
{
return new UserFeedItem($model);
}
}
Імёны налад — гэта імёны параметраў канструктара канвертара, а не шляхі канфігурацыі. Выкарыстоўвайце lineEnding, а не line_ending або feeds.converters.csv.line_ending.
| Фармат | Дапушчальныя імёны |
|---|---|
csv | delimiter, enclosure, escape, lineEnding |
json | options, pretty |
jsonl | options |
xml, rss | pretty |
Толькі зададзеныя значэнні перавызначаюць стандартныя налады праграмы. Feed::converterOptions() збірае ўспадкаваныя атрыбуты: даччыныя ключы перавызначаюць бацькоўскія, а апошняе абвяшчэнне таго ж імя ў адным класе мае прыярытэт. Іншыя стужкі захоўваюць уласныя налады.
Недапушчальныя імёны для выбранага фармату выклікаюць InvalidArgumentException. JSON Lines выдаляе JSON_PRETTY_PRINT з options, каб кожны элемент займаў адзін радок.
Карыстальніцкія прывязкі канвертараў павінны ўлічваць перададзеныя параметры канструктара. Карыстальніцкі ConverterHelper, які перавызначае get() або resolve(), павінен таксама падтрымліваць resolveWithOptions(); гл. кантракт пашырэння канвертара.
Атрыбут DateFormat
Дадайце #[DateFormat] да класа элемента. Метад item() вышэй выбірае гэты клас для кожнага карыстальніка, які экспартуецца:
namespace App\Feeds\Items;
use DragonCode\LaravelFeed\Attributes\DateFormat;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
#[DateFormat('Y-m-d H:i')]
class UserFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'id' => $this->model->id,
'createdAt' => $this->model->created_at,
];
}
}
Выкарыстоўвайце сімвалы фармату дат PHP. Вяртайце зыходныя значэнні DateTimeInterface з toArray(), напрыклад уласцівасці Eloquent з пераўтварэннем у дату. Радкі, ужо серыялізаваныя метадам $model->toArray(), не фарматуюцца нанова.
Найбліжэйшы бацькоўскі клас з атрыбутам задае ўспадкаваны фармат; атрыбут у даччыным класе перавызначае яго. Даты элемента фарматуюцца перад звычайным ланцужком пераўтварэнняў. Гэты фармат мае прыярытэт над фарматамі стужкі і глабальнымі фарматамі дат, захоўваючы feeds.date.timezone. Наступныя радковыя пераўтваральнікі ўсё яшчэ могуць змяніць адфарматаванае значэнне.
Атрыбут дзейнічае ва ўсіх фарматах вываду, у тым ліку для ўкладзеных дат JSON/XML і атрыбутаў элементаў XML/RSS, якія вяртае attributes(). Ён не ўплывае на FeedInfo, атрыбуты каранёвага элемента і іншыя класы элементаў. Без яго звычайны ланцужок пераўтварэння дат выкарыстоўвае наладжаны фармат, стандартнае значэнне якога — DATE_ATOM.