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

Fasáda je odporúčaná voľba, nie jediná cesta. K dispozícii máte tri rovnocenné vstupné body:

  • Fasáda Advertisements — najkratší zápis, ktorý používa aj zvyšok tejto dokumentácie.
  • Manažér RoundlyConsulting\Advertisements\AdvertisementManager — koreň fasády. Injektujte ho cez konštruktor a získate rovnaké API s explicitnou závislosťou a bez statických volaní.
  • Akcie — jednoúčelové triedy v RoundlyConsulting\Advertisements\Actions s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

Injektovanie manažéra

use RoundlyConsulting\Advertisements\AdvertisementManager;
use RoundlyConsulting\Advertisements\Models\Advertisement;

final class LaunchCampaign
{
    public function __construct(private AdvertisementManager $ads) {}

    public function __invoke(Advertisement $ad): void
    {
        $this->ads->for($ad)->placements()->sync(['sidebar', 'header']);
        $this->ads->publish($ad);
    }
}

AdvertisementManager zámerne nie je final: Advertisements::fake() nainštaluje jeho podtyp AdvertisementsFake za fasádu aj do kontajnera — fake preto dostanú aj manažéry injektované cez konštruktor.

Volanie akcie

Akciu získajte z kontajnera alebo ju uveďte ako typ v controlleri, jobe či vlastnej akcii:

use RoundlyConsulting\Advertisements\Actions\PublishAdvertisement;

// The raw use case:
app(PublishAdvertisement::class)->execute($ad, now()->addDay());
use Illuminate\Http\RedirectResponse;
use RoundlyConsulting\Advertisements\Actions\PublishAdvertisement;
use RoundlyConsulting\Advertisements\Models\Advertisement;

final class ScheduleAdvertisementController
{
    public function __invoke(Advertisement $advertisement, PublishAdvertisement $publish): RedirectResponse
    {
        $publish->execute($advertisement, now()->addDay());   // scheduled for tomorrow

        return back();
    }
}

Manažér pri každom volaní získa akciu z kontajnera, takže vlastná implementácia zmení aj správanie fasády. Fake nahrádza manažéra, nie akcie — akcia zavolaná priamo stále zapisuje riadky.

Metóda fasády → akcia

Metóda fasádyAkciaSignatúra
create()CreateAdvertisementexecute(AdvertisementData $data): Advertisement
update()UpdateAdvertisementexecute(Advertisement $ad, AdvertisementData $data): Advertisement
publish()PublishAdvertisementexecute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement
unpublish()UnpublishAdvertisementexecute(Advertisement $ad): Advertisement
expire()ExpireAdvertisementexecute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement
archive()ArchiveAdvertisementexecute(Advertisement $ad): Advertisement
delete()DeleteAdvertisementexecute(Advertisement $ad): bool
for($ad)->placements()->attach()AttachPlacementsexecute(Advertisement $ad, iterable $placements): Advertisement
for($ad)->placements()->detach()DetachPlacementsexecute(Advertisement $ad, iterable $placements): Advertisement
for($ad)->placements()->sync()SyncPlacementsexecute(Advertisement $ad, iterable $placements): Advertisement
for($ad)->track()->impression()RecordImpressionexecute(Advertisement $ad, $placement = null, ?ImpressionData $data = null): ?AdvertisementEvent
for($ad)->track()->click()RecordClickexecute(Advertisement $ad, $placement = null, ?ImpressionData $data = null): ?AdvertisementEvent

create() a update() prijímajú AdvertisementData; akcie merania voliteľné ImpressionData (pozrite Vytváranie a úprava reklám a Meranie zobrazení a klikov). Surové akcie merania zaznamenajú presne to, čo dostanú — kontrola živej reklamy aj umiestnenia je v for($ad)->track($placement):

use RoundlyConsulting\Advertisements\Actions\RecordImpression;
use RoundlyConsulting\Advertisements\DataTransferObjects\ImpressionData;

// Records what it is given — the live-ad and placement checks live in for($ad)->track($placement).
app(RecordImpression::class)->execute($ad, 'sidebar', new ImpressionData(ip: $request->ip()));

RecordAdvertisementEvent je @internal — jediná cesta zápisu za RecordImpression, RecordClick aj jobom pre frontu. Merajte cez fasádu alebo tieto dve akcie.

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.