DI a akcie
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ády | Akcia | Signatúra |
|---|---|---|
create() | CreateAdvertisement | execute(AdvertisementData $data): Advertisement |
update() | UpdateAdvertisement | execute(Advertisement $ad, AdvertisementData $data): Advertisement |
publish() | PublishAdvertisement | execute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement |
unpublish() | UnpublishAdvertisement | execute(Advertisement $ad): Advertisement |
expire() | ExpireAdvertisement | execute(Advertisement $ad, ?CarbonInterface $at = null): Advertisement |
archive() | ArchiveAdvertisement | execute(Advertisement $ad): Advertisement |
delete() | DeleteAdvertisement | execute(Advertisement $ad): bool |
for($ad)->placements()->attach() | AttachPlacements | execute(Advertisement $ad, iterable $placements): Advertisement |
for($ad)->placements()->detach() | DetachPlacements | execute(Advertisement $ad, iterable $placements): Advertisement |
for($ad)->placements()->sync() | SyncPlacements | execute(Advertisement $ad, iterable $placements): Advertisement |
for($ad)->track()->impression() | RecordImpression | execute(Advertisement $ad, $placement = null, ?ImpressionData $data = null): ?AdvertisementEvent |
for($ad)->track()->click() | RecordClick | execute(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 kryptomienOdoslaní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.