Inštalácia
Pridajte balík, spustite jeho inštalátor a potom migráciu. Service provider aj globálny alias fasády Tickets sa zaregistrujú automaticky, spolu s providermi balíkov Roundly, na ktorých stojí:
composer require roundly-consulting/tickets-for-laravel
php artisan tickets:install
php artisan migratetickets:install publikuje tickets-config, potom migrácie všetkých balíkov, na ktorých tickets stojí (media-, likes-, reports-, approvals-, comments-, lifecycle- a attributes-migrations), a nakoniec tickets-migrations. Migrácie každého balíka si zachovajú vlastné poradie a žiadna neodkazuje na tabuľky iného balíka. Opakované spustenie je bezpečné: publikovaný súbor zostane, pokiaľ nezadáte --force, a znova publikovaná migrácia skončí v tom istom súbore ako predtým. Potom vypíše typy kľúčov inštalácie a ďalšie kroky.
1. Pred migráciou zlaďte typy kľúčov
Migrácie podľa typov kľúčov vyberajú typy stĺpcov. Pri bigint id používateľov vyhovujú predvolené hodnoty. Pri kľúčoch UUID alebo ULID ich nastavte ešte pred php artisan migrate:
TICKETS_PRIMARY_KEY_TYPE=uuid # tickets and guests (= lifecycle, attributes, comments key types)
TICKETS_KEY_TYPE=uuid # requester, assignee, project, watcher, actor morphs (= your users)
LIFECYCLE_KEY_TYPE=uuid
LIFECYCLE_ACTOR_KEY_TYPE=uuid
COMMENTS_KEY_TYPE=uuid
ATTRIBUTES_KEY_TYPE=uuidcomments.key_type určuje kľúč autora komentára (používateľa) aj komentovaného modelu (tiketu), takže celá inštalácia beží na jednom type kľúča — zmiešané typy nie sú podporované a tickets:doctor nahlási každý nesúlad (pozrite Modely, kľúče a čísla tiketov).
2. Z modelu používateľa urobte riešiteľa
Tikety preberajú agenti a tiket môže držať len model, ktorý implementuje Contracts\Assignee: claim(), assign() aj riešiteľ zadaný pri založení vyhodia pre čokoľvek iné InvalidAssigneeException (predvolený riešiteľ kategórie, ktorý ním nie je, sa preskočí). Pridajte kontrakt a jeho predvolenú implementáciu:
use RoundlyConsulting\Tickets\Concerns\IsTicketAssignee;
use RoundlyConsulting\Tickets\Contracts\Assignee;
class User extends Authenticatable implements Assignee
{
use IsTicketAssignee;
}IsTicketAssignee pomenuje riešiteľa podľa atribútu name, notifikuje priamo používateľa a za vhodného riešiteľa tiketu ho považuje vtedy, keď je pre tiket agentom (oprávnenie agenta zúžené rozsahom agentov). Ak chcete správanie zmeniť, prepíšte ktorúkoľvek z troch metód — ticketAssigneeName(), ticketNotifiables(), isEligibleTicketAssignee().
3. Definujte oprávnenia
Balík sa pýta Gate, sám však žiadne oprávnenie nedefinuje a nedefinované oprávnenie zamieta:
// AppServiceProvider::boot()
use Illuminate\Support\Facades\Gate;
Gate::define('tickets.agent', fn ($user) => $user->is_support); // who is an agent (also merge by default)
Gate::define('tickets.assign', fn ($user) => $user->is_team_lead); // assign tickets to others
Gate::define('tickets.manage', fn ($user) => $user->is_admin); // delete/restore tickets, run categories, fields, tagsis_support, is_team_lead a is_admin zastupujú vaše vlastné príznaky — stĺpec alebo kontrolu roly; štandardná tabuľka users nemá ani jeden. Funguje aj balík oprávnení, ktorý ich udeľuje cez Gate::before (napríklad permissions-for-laravel), a názvy oprávnení sa dajú nastaviť v tickets.authorization.abilities.*.
4. Naplánujte kontroly
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('tickets:sweep')->everyFiveMinutes(); // overdue and due-soon flags
Schedule::command('lifecycle:sweep')->everyMinute(); // closes resolved tickets after 7 daysDo plánovača sa za vás nič nezaregistruje. Bez tickets:sweep sa žiadny tiket nikdy neoznačí ako po termíne; bez lifecycle:sweep sa vyriešené tikety nikdy samy neuzavrú.
5. Skontrolujte inštaláciu
php artisan tickets:doctorČerstvá inštalácia končí s kódom 1, kým ju nenastavíte: notifikácie pre hostí sú predvolene zapnuté a predvolený generátor odkazov pre hostí potrebuje routy pre hostí, ktoré sú predvolene vypnuté. Vyriešite to jedným z troch spôsobov — sprístupníte API s prístupom pre hostí, naviažete vlastný Contracts\GuestLinkGenerator (samostatný frontend, pozrite Hostia a odkazy pre hostí) alebo vypnete e-maily hosťom:
# Serve the API with guest access (guests are on by default)
TICKETS_ROUTES=on
# …or stop guest mail
TICKETS_NOTIFY_GUESTS=offVoliteľné kroky
| Chcete | Urobte |
|---|---|
| JSON API | TICKETS_ROUTES=on; so Sanctum publikujte konfiguráciu a v tickets.routes.middleware použite auth:sanctum (pozrite JSON API). |
| Zmeniť routu | php artisan vendor:publish --tag=tickets-routes — publikovaný routes/tickets.php natrvalo nahradí routy balíka. |
| Zmeniť text | php artisan vendor:publish --tag=tickets-translations (dodávajú sa en a sk). |
| Validačné hlásenia v inom jazyku | Tickets pomenúva vstupy sám (tickets::validation.attributes, guest_fields; dodávajú sa en a sk); vety hlásení Laravelu pochádzajú z vášho lang/<locale>/validation.php — Laravel dodáva len angličtinu, preto pridajte napríklad lang/sk/validation.php (php artisan lang:publish vám dá anglickú verziu na preklad). |
| Notifikácie pre zmienky | Nastavte comments.mention_resolver (comments-for-laravel). |
| Notifikácie v databáze | Tabuľka notifications vo vašej aplikácii a database v tickets.notifications.channels. |
| Tímy ako riešitelia | Model tímu, ktorý implementuje Contracts\Assignee (funguje aj teams-for-laravel). |
Publish tagy
| Tag | Publikuje |
|---|---|
tickets-config | config/tickets.php |
tickets-migrations | desať migrácií s časovou pečiatkou z publikovania |
tickets-translations | lang/vendor/tickets/{en,sk}/{enums,messages,notifications,validation}.php |
tickets-routes | routes/tickets.php |
php artisan vendor:publish --tag=tickets-config
php artisan vendor:publish --tag=tickets-migrations
php artisan vendor:publish --tag=tickets-translations
php artisan vendor:publish --tag=tickets-routesMigrácie sa len publikujú: provider žiadnu nenačíta, takže php artisan migrate spustí presne tie súbory, ktoré ste publikovali. Publikovaný routes/tickets.php natrvalo nahradí routy balíka, preto ho inštalátor nikdy nepublikuje.
Preklady
Každý text pre používateľov ide cez menný priestor tickets::, v angličtine (en) a slovenčine (sk) s rovnakými kľúčmi: enums.php (jedna mapa popisov na enum), messages.php (texty výnimiek a príkazov), notifications.php (e-maily) a validation.php (zobrazovaný názov každého vstupu API plus guest_fields). Ak chcete zmeniť riadok, publikujte ich cez --tag=tickets-translations, pre ďalší jazyk pridajte lang/vendor/tickets/<locale>/… — chýbajúci kľúč použije záložný jazyk Laravelu. Hlásenia výnimiek, doctor, inštalátor, popisy enumov aj e-maily sa riadia aktuálnym jazykom (pri e-maile preferredLocale() príjemcu).
php artisan about
Sekcia Tickets ukazuje typ primárneho kľúča, typ kľúča, triedu životného cyklu, enum priorít, prefix čísel, či sú zapnuté aktivity, routy a prístup pre hostí, dĺžku do automatického uzavretia a notifikácie s ich kanálmi. Chybné nastavenie sa zobrazí ako INVALID namiesto zlyhania príkazu a nikdy sa nezobrazia údaje hostí ani tajomstvá.
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.