Podávanie hlásení
Odporúčaným vstupným bodom je fluentná fasáda. Reports::report() začne PendingReport o subjekte; create() ho zvaliduje a uloží:
use RoundlyConsulting\Reports\Enums\Reason;
use RoundlyConsulting\Reports\Facades\Reports;
$report = Reports::report($post)
->by($user)
->for(Reason::Abuse) // typed, validated reason
->because('This post violates the community guidelines.')
->create();Začať môžete aj od nahlasovateľa alebo použiť vlastný slug dôvodu:
// 'copyright' must be listed in config('reports.reasons')
Reports::from($user)->about($post)->for('copyright')->create();Alebo odovzdajte DTO jedným volaním:
use RoundlyConsulting\Reports\DataTransferObjects\CreateReportData;
use RoundlyConsulting\Reports\Enums\Reason;
use RoundlyConsulting\Reports\Facades\Reports;
Reports::create(new CreateReportData(subject: $post, reason: Reason::Spam, reporter: $user));Cez trait nahlasovateľa
Metódy traitu idú cez manažér, takže ich Reports::fake() zaznamená tiež:
// Description and reason are optional — the reason falls back to default_reason.
$report = $user->giveReportTo($post);
$report = $user->giveReportTo($post, 'Violates the guidelines.', Reason::Abuse);
// Or start a fluent build from the reporter:
$user->report($post)->for(Reason::Spam)->because('Spammy.')->create();Builder PendingReport
- about($subject) — nahlásený model. Reports::report() ho nastaví za vás.
- by($reporter) — model nahlasovateľa. Vymaže prípadný identifikátor hosťa.
- asGuest($identifier) — deduplikačný kľúč hosťa namiesto nahlasovateľa. Vymaže nahlasovateľa.
- for($reason) / reason($reason) — prípad Reason alebo reťazcový slug; reason() je alias.
- because($description) — voľný textový popis od nahlasovateľa.
- create() — zvaliduje dôvod, uplatní ochranu pred duplicitami, uloží hlásenie v stave Pending a vráti ho.
Bez dôvodu create() použije default_reason. Bez subjektu vyhodí LogicException.
V controlleri
Typický endpoint na nahlasovanie validuje voči povoleným slugom — vrátane vlastných — a duplicitu zmení na zrozumiteľnú správu:
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use RoundlyConsulting\Reports\Exceptions\DuplicateReportException;
use RoundlyConsulting\Reports\Facades\Reports;
public function store(Request $request, Post $post): RedirectResponse
{
$data = $request->validate([
'reason' => ['required', Rule::in(array_keys(Reports::reasons()))],
'description' => ['nullable', 'string', 'max:2000'],
]);
$pending = Reports::report($post)->by($request->user())->for($data['reason']);
if (filled($data['description'] ?? null)) {
$pending->because($data['description']);
}
try {
$pending->create();
} catch (DuplicateReportException) {
return back()->with('status', 'You have already reported this post.');
}
return back()->with('status', 'Thanks, a moderator will review it.');
}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.