NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Advertisements for Laravel

Vytváranie a úprava reklám

Metódy create aj update prijímajú AdvertisementData. Povinný je len name; price je nepovinný RoundlyConsulting\Money\Money (reklama bez ceny odovzdá price: null alebo ho vynechá). Pri vytvorení je vynechaný argument jednoducho prázdny, pri úprave znamená „ponechať uloženú hodnotu“:

use Illuminate\Support\Collection;
use RoundlyConsulting\Advertisements\DataTransferObjects\AdvertisementData;
use RoundlyConsulting\Advertisements\Facades\Advertisements;
use RoundlyConsulting\Money\Money;

$ad = Advertisements::create(new AdvertisementData(
    name: 'Vintage road bike',
    price: Money::ofMinor(25000, 'EUR'),  // 250.00 EUR
    category: $bikesCategory,             // a Category model, an id, or a slug — resolved to category_id
    description: 'Lightly used, great condition.',
    author: $user,                        // any Eloquent model (polymorphic author)
    meta: new Collection(['featured' => true]),
    publishedAt: now(),
    expiresAt: now()->addMonth(),
));                                       // → AdvertisementCreated
ArgumentTypUloženie
namestringPovinné. Uloží sa pod aktívny jazyk a pre každý jazyk sa z neho vytvorí slug.
price?MoneySuma v price (najmenšie jednotky), kód v currency. Pri reklame bez ceny ho vynechajte.
categoryCategory|int|string|nullModel, id alebo slug, preložený na category_id; neznámy slug znamená null.
description?stringUloží sa pod aktívny jazyk.
author?ModelĽubovoľný Eloquent model — polymorfný autor.
meta?CollectionĽubovoľné doplnkové údaje uložené ako JSON.
publishedAt?CarbonInterfacepublished_at.
expiresAt?CarbonInterfaceexpires_at.

create() spustí AdvertisementCreated. Ak zadáte publishedAt, reklama bude od toho okamihu zverejnená (alebo naplánovaná) — accessor stavu aj scopy čítajú dátumy — no AdvertisementPublished spúšťa len publish(). Ak na tejto udalosti závisia listenery, zavolajte ho.

Presné továrne na cenu

Alebo použite továreň, ktorá pomenúva jednotku a menu predvolí podľa default_currency. Ani jedna neprijíma float:

// Minor units (cents): an int or an integer string — wider than int64 is fine.
$data = AdvertisementData::fromMinor(name: 'Vintage road bike', minor: 25000);          // 250.00 EUR
$data = AdvertisementData::fromMinor(name: 'Bike', minor: '00199', currency: 'USD');    // 1.99 USD

// Decimal major units: exact, exponent-aware, never rounded.
$data = AdvertisementData::fromDecimal(name: 'Bike', amount: '1.10');                   // 110 cents
$data = AdvertisementData::fromDecimal(name: 'Bike', amount: '1500', currency: 'JPY');  // 1500 yen
AdvertisementData::fromDecimal(name: 'Bike', amount: '19.999');                         // throws RoundingNecessary

// A price-less ad: the constructor with no price
$data = new AdvertisementData(name: 'Free to a good home');

Obe prijímajú rovnaké voliteľné argumenty category, description, author, meta, publishedAt a expiresAt ako konštruktor.

Z požiadavky

Validujte pravidlami balíka money a cenu načítajte cez Request::money() — JSON float (1.1) prevedie presne, zatiaľ čo (int) ceil($request->float('price') * 100) uloží 1.10 ako 1.11:

use RoundlyConsulting\Advertisements\DataTransferObjects\AdvertisementData;
use RoundlyConsulting\Money\Rules\{CurrencyCode, MoneyAmount};

$request->validate([
    'price'    => ['required', MoneyAmount::inCurrencyFrom('currency')->min('0')],
    'currency' => ['required', new CurrencyCode],
]);

// Preferred — JSON or form bodies:
$data = new AdvertisementData(
    name: (string) $request->string('name'),
    price: $request->money('price', currencyKey: 'currency'),
);

// Form-encoded input only (the value is already a string):
$data = AdvertisementData::fromDecimal(
    name: (string) $request->string('name'),
    amount: (string) $request->string('price'),
    currency: (string) $request->string('currency'),
);

Úprava

$ad = Advertisements::update($ad, new AdvertisementData(
    name: 'Vintage road bike (reduced)',
    price: Money::ofMinor(19900, 'EUR'),
));                                       // → AdvertisementUpdated

update() zmení len polia, ktoré odovzdáte. name je vždy povinné; každý vynechaný argument si ponechá uloženú hodnotu reklamy, takže zníženie ceny vyššie nezmení popis, kategóriu, meta, autora, umiestnenia ani dátumy publishedAt / expiresAt — a živá reklama zostane živá.

  • Ak chcete pole vymazať, odovzdajte ho výslovne ako null: author: null odpojí autora, category: null zruší kategóriu, publishedAt: null vráti reklamu do konceptu.
  • Rovnaké pravidlo platí aj pre voliteľné argumenty fromMinor() a fromDecimal().
  • name a description sa zapíšu pod aktívny jazyk; ostatné jazyky si hodnoty ponechajú.
  • Cena v inej mene reklamu prevedie do tejto meny (akcia najprv zapíše stĺpec currency); price: null vymaže sumu a currency ponechá.
  • AdvertisementData::provides($field) povie, či bolo voliteľné pole odovzdané — výslovné null sa počíta.
// Pass an argument as an explicit null to clear it
$ad = Advertisements::update($ad, new AdvertisementData(
    name: $ad->name,
    author: null,        // dissociates the author
    category: null,      // uncategorises the ad
    publishedAt: null,   // back to draft
));

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.