Presun komentárov
Comments::transfer($from, $to) presunie všetky komentáre jedného subjektu na iný a vráti, koľko ich presunul — pre zlúčenie dvoch záznamov, napríklad duplicitných tiketov alebo dvoch článkov o tej istej veci. V jednej transakcii presmeruje polymorfný vzťah commentable všetkých komentárov $from: komentáre najvyššej úrovne aj odpovede, neviditeľné, pending aj hidden a tiež mäkko zmazané, takže neskoršie obnovenie skončí na $to:
use RoundlyConsulting\Comments\Facades\Comments;
$moved = Comments::transfer($duplicate, $original); // int — e.g. 4Čo sa presunie spolu s komentármi
- Odpovede si ponechajú parent_id a každý rodič sa presunie s nimi, takže vlákna zostanú celé.
- Zmienky, páčiky, nahlásenia a prílohy patria komentáru, nie subjektu, preto ho nasledujú.
- Zámok vlákna (locked_at) je na komentári a presunie sa s ním.
- Zámok subjektu zostane, kde je: zamknutý $from zostane zamknutý — presun jeho komentárov preč je povolený — a $to sa nezamkne.
- Komentáre, ktoré $from napísal ako autor, zostanú nedotknuté; presúvajú sa len komentáre na ňom.
- updated_at sa nemení — presun nie je úprava.
Odmietnutia
Keď niektorá kontrola zlyhá, nič sa nepresunie, nič sa nezaznamená a žiadna udalosť sa neodošle:
- $from a $to sú ten istý subjekt — rovnaký morph typ aj kľúč, hoci ako dve inštancie —, preto sa vyhodí InvalidCommentTransferException.
- $to má zámok subjektu, preto sa vyhodí CommentsLockedException.
- Pri zapnutom comments.authorization sa na $to kontroluje existujúca ability create — create(?Model $user, ?Model $commentable) s $to ako komentovaným subjektom — a zamietnutie vyhodí UnauthorizedCommentActionException. Policy, ktorá nerozširuje CommentPolicy, nepotrebuje žiadnu novú metódu.
use RoundlyConsulting\Comments\Exceptions\CommentsLockedException;
use RoundlyConsulting\Comments\Exceptions\InvalidCommentTransferException;
try {
Comments::transfer($duplicate, $original);
} catch (InvalidCommentTransferException $e) {
// $duplicate and $original are the same subject
} catch (CommentsLockedException $e) {
// $original is locked
}Po presune
Odošle sa CommentsTransferred s $from, $to a $count — aj vtedy, keď sa nič nepresunulo a $count je 0 — a Comments::fake() volanie zaznamená pre assertTransferred() (pozrite Testovanie):
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Comments\Events\CommentsTransferred;
Event::listen(function (CommentsTransferred $event): void {
$event->from; // the subject the comments left
$event->to; // the subject they now belong to
$event->count; // how many moved — 0 is possible
});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.