NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Reports for Laravel

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 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.