Písanie komentárov
Fluentný builder
Comments::on() spustí fluentný builder, ktorý sa číta ako veta; post() komentár uloží a vráti:
use RoundlyConsulting\Comments\Facades\Comments;
$comment = Comments::on($post)
->as($user)
->body('Nice write-up!')
->post();
// A reply, fluently (the parent must belong to the same subject):
Comments::on($post)->as($user)->reply($comment)->body('Thanks!')->post();
// Hidden comment:
Comments::on($post)->as($user)->visible(false)->body('Internal note')->post();
// Anonymous / guest comment — omit ->as():
Comments::on($post)->body('Great read.')->post();- as($author) — autor; ak ho vynecháte, uloží sa anonymný komentár hosťa.
- body($body) — telo komentára, pred uložením zbavené okrajových medzier.
- visible($visible = true) — príznak viditeľnosti, nezávislý od stavu moderovania.
- reply($parent) — komentár bude odpoveďou; rodič musí patriť tomu istému subjektu.
- post() — zvaliduje, uloží a vráti Comment.
Typované DTO
V jobs vo fronte alebo v servisnom kóde odovzdajte DTO WriteCommentData do Comments::write():
use RoundlyConsulting\Comments\DataTransferObjects\WriteCommentData;
use RoundlyConsulting\Comments\Facades\Comments;
$comment = Comments::write(new WriteCommentData(
commentable: $post,
body: 'From a job',
author: $user, // optional
parent: $rootComment, // optional reply — must belong to $post
));Z modelu autora
GivesComments pridáva skratku writeComment(). Odovzdajte komentovaný model, telo komentára a voliteľný príznak viditeľnosti (predvolene true). Ide cez ten istý manažér ako fasáda:
$comment = $user->writeComment(
commentable: $post,
comment: 'This is a very good blog post, thanks for sharing!',
visible: true, // optional, defaults to true
); // goes through the same manager as Comments::on($post)->as($user)->…->post()Čo kontroluje každý zápis
Builder, write() aj trait spúšťajú tú istú akciu WriteCommentAction v tomto poradí:
- Rodič — odpoveď, ktorej rodič patrí inému subjektu, vyhodí InvalidCommentParentException ešte pred autorizáciou.
- Autorizácia — ability create, len pri zapnutom comments.authorization.
- Telo — oreže sa; prázdne telo alebo telo dlhšie ako max_length vyhodí InvalidCommentBodyException.
- Hĺbka odpovede — odpoveď hlbšie ako max_depth vyhodí MaxReplyDepthExceededException; mäkko zmazaní predkovia sa započítavajú.
- Zámky — zamknutý subjekt alebo odpoveď kdekoľvek v zamknutom vlákne vyhodí CommentsLockedException.
- Stav — approved, alebo pending pri zapnutom require_approval; zhoda s blocklistom komentár odmietne, podrží na kontrolu alebo skryje.
- Zmienky — @handles z tela sa uložia a priradia; CommentMentioned sa odošle až po schválení komentára.
Po uložení komentára sa odošle CommentCreated. Každá chyba je potomkom CommentsException, takže jediný catch ich všetky premení na chybu formulára:
use Illuminate\Http\Request;
use RoundlyConsulting\Comments\Exceptions\CommentsException;
use RoundlyConsulting\Comments\Facades\Comments;
public function store(Request $request, Post $post)
{
try {
Comments::on($post)
->as($request->user())
->body((string) $request->input('body'))
->post();
} catch (CommentsException $e) {
return back()->withErrors(['body' => $e->getMessage()])->withInput();
}
return back();
}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.