Перайсці да асноўнага змесціва
Версія: 2.x

Атрыбуты канфігурацыі

Выкарыстоўвайце 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.

ФарматДапушчальныя імёны
csvdelimiter, enclosure, escape, lineEnding
jsonoptions, pretty
jsonloptions
xml, rsspretty

Толькі зададзеныя значэнні перавызначаюць стандартныя налады праграмы. 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.

Глядзіце таксама​