DI a akcie
Fasáda je odporúčaná predvoľba, nie jediná cesta. Ten istý kód spúšťajú tri vstupné body:
- Fasáda Comments — najkratší zápis.
- Manažér vložený cez konštruktor — rovnaké API s explicitnou závislosťou a bez statických volaní. RoundlyConsulting\Comments\CommentsManager je koreň fasády: singleton, zámerne nie final, pretože ho fake rozširuje.
- Akcie — RoundlyConsulting\Comments\Actions\*Action, final readonly triedy s jedinou metódou execute(), pre joby vo fronte alebo vaše vlastné akcie.
Vloženie manažéra
Comments::fake() nahradí manažér aj v kontajneri, takže fake dostanú aj manažéry vložené cez konštruktor:
use RoundlyConsulting\Comments\CommentsManager;
use RoundlyConsulting\Comments\Models\Comment;
final class PublishFeedback
{
public function __construct(private CommentsManager $comments) {}
public function __invoke(Post $post, User $user, string $body): Comment
{
return $this->comments->on($post)->as($user)->body($body)->post();
}
}
// Everything on the facade is on the manager:
$this->comments->query()->pending()->mostReported()->paginate();
$this->comments->lockThread($comment);Spustenie akcie
Každá metóda manažéra si z kontajnera vyžiada jednu akciu, takže vaša náhrada akcie platí pre fasádu, builder, hromadné moderovanie aj traity modelov. Priame volanie akcie manažér obíde, preto ho Comments::fake() nezaznamená:
use RoundlyConsulting\Comments\Actions\LockThreadAction;
use RoundlyConsulting\Comments\Actions\WriteCommentAction;
use RoundlyConsulting\Comments\DataTransferObjects\WriteCommentData;
$comment = app(WriteCommentAction::class)->execute(new WriteCommentData(
commentable: $post,
body: 'From a job',
author: $user, // optional
parent: $rootComment, // optional reply — must belong to $post
));
app(LockThreadAction::class)->execute($comment);Metóda fasády → akcia
| Metóda fasády | Akcia | Čo robí |
|---|---|---|
on()->post(), write() | WriteCommentAction::execute(WriteCommentData) | Odmietne cudzieho rodiča, autorizuje, overí telo, skontroluje hĺbku, zámky a blocklist, uloží, synchronizuje zmienky. |
update() | UpdateCommentAction::execute(UpdateCommentData) | Upraví telo, znova uplatní blocklist, zosynchronizuje zmienky; spustí CommentUpdated. |
delete(), deleteAll() | DeleteCommentAction::execute(Comment) | Mäkko zmaže; spustí CommentDeleted. |
restore() | RestoreCommentAction::execute(Comment) | Obnoví mäkko zmazaný komentár. |
approve(), approveAll() | ApproveCommentAction::execute(Comment) | Stav approved; spustí CommentApproved a potom CommentMentioned pre doteraz zadržané zmienky. |
hide(), hideAll() | HideCommentAction::execute(Comment) | Stav hidden; spustí CommentHidden. |
lock() | LockSubjectAction::execute(Model) | Uloží CommentLock subjektu. |
unlock() | UnlockSubjectAction::execute(Model) | Odstráni zámok subjektu. |
lockThread() | LockThreadAction::execute(Comment) | Zamkne vlákno; spustí CommentThreadLocked. |
unlockThread() | UnlockThreadAction::execute(Comment) | Zruší zámok vlákna; spustí CommentThreadUnlocked. |
query(), for(), byAuthor(), isLocked() a isThreadLocked() sú čítania bez akcie. SyncCommentMentionsAction a NotifyCommentMentionsAction sú @internal — stavebné kamene, ktoré spúšťajú akcie zápisu, úpravy a schválenia, nie operácie pre hostiteľskú aplikáciu. Akcie prijímajú dve DTO z RoundlyConsulting\Comments\DataTransferObjects: WriteCommentData(commentable, body, author, visible, parent) a UpdateCommentData(comment, body).
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.