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á 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ádyAkciaČ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 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.