Všetky balíky
Notifications for Laravel
Konfigurácia
Balík funguje bez akejkoľvek konfigurácie. config/notifications.php publikujte, len ak chcete niečo zmeniť:
php artisan vendor:publish --tag="notifications-config"Každá hodnota sa číta prísne: preklep vyhodí výnimku s názvom kľúča a prázdna env hodnota (KEY=) znamená „nenastavené“ — platí predvolená hodnota.
- Doby sú v ISO-8601 (PT5M, P1D); časy sú miestne HH:MM.
- Prepínače prijímajú true/false, 1/0, on/off a yes/no.
- Celé čísla musia byť v rozsahu uvedenom v tabuľke; hodnota mimo neho vyhodí výnimku, neoreže sa.
- Kľúče s triedami (resolvery, resources) musia uvádzať triedu správneho druhu; čokoľvek iné vyhodí výnimku s názvom kľúča.
Konfiguračný súbor
use RoundlyConsulting\Notifications\Http\Resources\NotificationActorResource;
use RoundlyConsulting\Notifications\Http\Resources\NotificationContextResource;
use RoundlyConsulting\Notifications\Http\Resources\NotificationSubjectResource;
use RoundlyConsulting\Notifications\Models\DigestRun;
use RoundlyConsulting\Notifications\Models\InboxItem;
use RoundlyConsulting\Notifications\Models\NotificationDelivery;
use RoundlyConsulting\Notifications\Models\NotificationReceipt;
use RoundlyConsulting\Notifications\Models\NotificationReminder;
use RoundlyConsulting\Notifications\Recipients\ContractGroupResolver;
use RoundlyConsulting\Notifications\Support\DefaultTimezoneResolver;
return [
'types' => [],
'key_type' => env('NOTIFICATIONS_KEY_TYPE', 'bigint'),
'subject_key_type' => env('NOTIFICATIONS_SUBJECT_KEY_TYPE'),
'context_key_type' => env('NOTIFICATIONS_CONTEXT_KEY_TYPE'),
'primary_key_type' => env('NOTIFICATIONS_PRIMARY_KEY_TYPE', 'bigint'),
'models' => [
'inbox_item' => InboxItem::class,
'delivery' => NotificationDelivery::class,
'reminder' => NotificationReminder::class,
'digest_run' => DigestRun::class,
'receipt' => NotificationReceipt::class,
],
'tables' => [
'inbox_items' => 'notification_inbox_items',
'deliveries' => 'notification_deliveries',
'reminders' => 'notification_reminders',
'digest_runs' => 'notification_digest_runs',
'receipts' => 'notification_receipts',
],
'queue' => [
'enabled' => env('NOTIFICATIONS_QUEUE_ENABLED', true),
'connection' => env('NOTIFICATIONS_QUEUE_CONNECTION'),
'queue' => env('NOTIFICATIONS_QUEUE_NAME'),
],
'fan_out' => [
'queue_above' => 50,
'chunk' => 100,
],
'access' => [
'ability' => 'view',
],
'recipients' => [
'group_resolver' => ContractGroupResolver::class,
],
'idempotency' => [
'ttl' => 'P30D',
],
'inbox' => [
'per_page' => 20,
'max_per_page' => 100,
'max_data_bytes' => 16384,
'recheck_on_read' => env('NOTIFICATIONS_INBOX_RECHECK', false),
'on_subject_deleted' => 'keep',
],
'preferences' => [
'inbox_mutable' => false,
'lock_store' => env('NOTIFICATIONS_LOCK_STORE'),
'lock_seconds' => 10,
],
'mail' => [
'strategy' => 'leading',
'minimal_for_sensitive' => true,
'address_resolver' => null,
'preferences_url' => env('NOTIFICATIONS_PREFERENCES_URL'),
'max_attempts' => 3,
'backoff' => [60, 300, 900],
'lease' => 'PT10M',
],
'quiet_hours' => [
'enabled' => true,
'default' => null,
],
'timezone' => [
'resolver' => DefaultTimezoneResolver::class,
'attribute' => 'timezone',
],
'digest' => [
'default' => 'off',
'time' => '08:00',
'weekly_day' => 'monday',
'max_items' => 50,
'lease' => 'PT15M',
],
'reminders' => [
'max_lateness' => 'P1D',
'batch' => 500,
'lease' => 'PT10M',
],
'interop' => [
'map' => [],
'suppress' => [],
'database' => 'redirect',
'hold' => true,
'notifiables' => [],
],
'routes' => [
'enabled' => env('NOTIFICATIONS_ROUTES_ENABLED', 'off'),
'prefix' => 'notifications',
'middleware' => ['api'],
'auth_middleware' => ['auth'],
],
'resources' => [
'actor' => NotificationActorResource::class,
'subject' => NotificationSubjectResource::class,
'context' => NotificationContextResource::class,
],
'prune' => [
'inbox_after' => 'P180D',
'deliveries_after' => 'P30D',
'digest_runs_after' => 'P90D',
'reminders_after' => 'P90D',
],
];Druhy a typy kľúčov
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
types | — | [] | Vaše druhy notifikácií: class-stringy tried, ktoré rozširujú NotificationType, vytvorené cez kontajner pri prvom použití. Čokoľvek iné vyhodí výnimku s názvom kľúča. Fluentné druhy pridáte cez Notifications::define(). |
key_type | NOTIFICATIONS_KEY_TYPE | bigint | Kľúč príjemcov a aktérov — bigint, uuid alebo ulid. Musí sa zhodovať s typom kľúča vašich používateľov aj s options.key_type, pretože preferencie sa ukladajú pre každého používateľa cez options-for-laravel. |
subject_key_type | NOTIFICATIONS_SUBJECT_KEY_TYPE | blank = key_type | Kľúč každého modelu subjektu. |
context_key_type | NOTIFICATIONS_CONTEXT_KEY_TYPE | blank = key_type | Kľúč každého modelu kontextu. |
primary_key_type | NOTIFICATIONS_PRIMARY_KEY_TYPE | bigint | Vlastné id tabuliek balíka a cudzie kľúče medzi nimi. Čítajú ho migrácie — nastavte ho pred migráciou. |
Modely a tabuľky
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
models.inbox_item | — | InboxItem::class | Model vymeníte tak, že rozšírite triedu z balíka a uvediete tu podtriedu. |
models.delivery | — | NotificationDelivery::class | Jeden riadok e-mailu na príjemcu, druh, subjekt a kontext v rámci okna. |
models.reminder | — | NotificationReminder::class | Riadky pripomienok a eskalácií. |
models.digest_run | — | DigestRun::class | Jeden riadok na príjemcu, frekvenciu a obdobie — evidencia súhrnov. |
models.receipt | — | NotificationReceipt::class | Potvrdenky idempotencie. |
tables.inbox_items | — | notification_inbox_items | Malé písmená, číslice a podčiarkovníky, najviac 30 znakov — MySQL obmedzuje názvy indexov na 64. |
tables.deliveries | — | notification_deliveries | Najviac 30 znakov. |
tables.reminders | — | notification_reminders | Najviac 24 znakov. |
tables.digest_runs | — | notification_digest_runs | Najviac 30 znakov. |
tables.receipts | — | notification_receipts | Najviac 30 znakov. |
Front a rozposielanie
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
queue.enabled | NOTIFICATIONS_QUEUE_ENABLED | true | Spúšťa úlohy e-mailov, súhrnov a rozposielania vo fronte. Vypnuté: bežia priamo po commite. |
queue.connection | NOTIFICATIONS_QUEUE_CONNECTION | blank = default | Spojenie frontu pre tieto úlohy. |
queue.queue | NOTIFICATIONS_QUEUE_NAME | blank = default | Názov frontu pre tieto úlohy. |
fan_out.queue_above | — | 50 | Viac vyhodnotených príjemcov, než je táto hodnota, doručia úlohy vo fronte (najmenej 1). |
fan_out.chunk | — | 100 | Príjemcovia na jednu úlohu rozposielania, 1–10000; každá úloha znovu overí prístup. |
Prístup, príjemcovia a idempotencia
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
access.ability | — | view | Gate oprávnenie, ktoré predvolená kontrola prístupu overuje na subjekte. |
recipients.group_resolver | — | ContractGroupResolver::class | Trieda ResolvesGroupMembers za Recipients::role() a Recipients::members(). |
idempotency.ttl | — | P30D | Ako dlho sa pamätá kľúč idempotencie (->once(), odoslanie pripomienok a eskalácií); potvrdenky sa potom vymažú. |
Schránka
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
inbox.per_page | — | 20 | Predvolená veľkosť stránky, od 1 po inbox.max_per_page. |
inbox.max_per_page | — | 100 | Najväčšia stránka a limit pre get(), 1–1000. |
inbox.max_data_bytes | — | 16384 | Limit veľkosti JSON dát jedného odoslania, 256–1048576 bajtov. |
inbox.recheck_on_read | NOTIFICATIONS_INBOX_RECHECK | false | Skryje položky, ku ktorých subjektu čitateľ už nemá prístup, po stránkach (počty zostávajú surové). |
inbox.on_subject_deleted | — | keep | Čo sa stane s položkami schránky pri zmazaní subjektu: keep, archive alebo delete. Platí pre subjekty s HasNotificationReminders. |
Preferencie
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
preferences.inbox_mutable | — | false | Vypnuté: stlmenie zastaví len e-mail — schránka položku vždy ponechá. |
preferences.lock_store | NOTIFICATIONS_LOCK_STORE | blank = default cache | Cache store pre zámok zápisu preferencií. Musí byť zdieľaný medzi servermi a podporovať atomické zámky; store bez zámkov vyhodí výnimku s názvom kľúča. |
preferences.lock_seconds | — | 10 | Ako dlho sa zámok drží, 1–300 sekúnd. |
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
mail.strategy | — | leading | leading: prvá udalosť odošle e-mail, ďalšie v okne sa doň zlúčia. trailing: jeden e-mail po skončení okna s konečným počtom. |
mail.minimal_for_sensitive | — | true | Subjekty, ktoré druh označí ako sensitive(), dostanú len e-mail s nadpisom a odkazom. |
mail.address_resolver | — | null | Trieda ResolvesMailAddress, ktorá určuje adresu každého e-mailu — typovaných aj súhrnov. null smeruje cez príjemcu. |
mail.preferences_url | NOTIFICATIONS_PREFERENCES_URL | null | URL alebo názov route pre odkaz „spravovať notifikácie“ v pätičke. |
mail.max_attempts | — | 3 | Počet pokusov o odoslanie e-mailu aj súhrnu, 1–20. |
mail.backoff | — | [60, 300, 900] | Sekundy medzi pokusmi — neprázdny zoznam kladných celých čísel. |
mail.lease | — | PT10M | E-mail prevzatý na odoslanie dlhšie, než je táto doba, sa označí ako zlyhaný a nikdy sa nepošle znova (najviac raz). |
Tiché hodiny a časové pásmo
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
quiet_hours.enabled | — | true | Globálny prepínač. |
quiet_hours.default | — | null | Tiché hodiny používateľov bez vlastných, napr. ['start' => '22:00', 'end' => '07:00']; rovnaké časy vyhodia výnimku. |
timezone.resolver | — | DefaultTimezoneResolver::class | Trieda ResolvesTimezone. |
timezone.attribute | — | timezone | Atribút príjemcu s časovým pásmom IANA; prázdna hodnota ho vypne. |
Súhrny
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
digest.default | — | off | off, daily alebo weekly — frekvencia používateľov bez vlastnej preferencie. |
digest.time | — | 08:00 | Miestny čas HH:MM. |
digest.weekly_day | — | monday | Deň týždenného súhrnu, monday–sunday. |
digest.max_items | — | 50 | Riadky v jednom súhrne, 1–1000; zvyšok je „a :count ďalších položiek v schránke“. |
digest.lease | — | PT15M | Súhrn, ktorý sa po tejto dobe stále odosiela, zlyhá aj so svojimi položkami. |
Pripomienky
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
reminders.max_lateness | — | P1D | Pripomienka oneskorená viac než o túto dobu (po výpadku), ktorej dátum už prešiel, sa preskočí. |
reminders.batch | — | 500 | Splatné riadky odoslané za jeden sweep, 1–10000. |
reminders.lease | — | PT10M | Riadok, ktorý sa po tejto dobe stále odosiela, sa vráti do stavu pending; opakované odoslanie nič nepošle dvakrát. |
Notifikácie iných balíkov
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
interop.map | — | [] | Trieda notifikácie => kľúč jedného z vašich druhov. |
interop.suppress | — | [] | Zoznam tried (všetky kanály) alebo trieda => zoznam kanálov. |
interop.database | — | redirect | Mapovaný kanál database: redirect (do schránky), keep alebo both. |
interop.hold | — | true | Podrží mapované e-maily počas tichých hodín. |
interop.notifiables | — | [] | Ďalšie triedy príjemcov; modely s ReceivesNotifications sa rátajú vždy. |
JSON API a resources
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
routes.enabled | NOTIFICATIONS_ROUTES_ENABLED | off | Sprístupní JSON API — vypnuté, kým ho nezapnete. |
routes.prefix | — | notifications | Prefix URI; lomky na okrajoch sa odstránia. Názvy route začínajú na notifications. |
routes.middleware | — | ['api'] | Middleware každého endpointu. |
routes.auth_middleware | — | ['auth'] | Autentifikačné middleware, napr. ['auth:sanctum']. Prázdny zoznam sa rešpektuje — controllery bez používateľa aj tak odpovedia 401. |
resources.actor | — | NotificationActorResource::class | JsonResource, cez ktorý sa vykreslí aktér položky; dostane model aktéra. |
resources.subject | — | NotificationSubjectResource::class | Dostane model subjektu. |
resources.context | — | NotificationContextResource::class | Dostane ContextReference (kľúč, popis, morph typ a id). Prázdna hodnota alebo null = predvolené; čokoľvek, čo nie je inštanciovateľný potomok JsonResource, vyhodí výnimku s názvom kľúča. |
Čistenie
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
prune.inbox_after | — | P180D | Prečítané a archivované (alebo zmazané) položky schránky staršie než táto doba. |
prune.deliveries_after | — | P30D | Ukončené doručenia. |
prune.digest_runs_after | — | P90D | Dokončené súhrny bez živej položky. |
prune.reminders_after | — | P90D | Ukončené pripomienky bez čakajúcej či odosielanej eskalácie. Každá doba čistenia je aspoň hodina. |
Prostredie
NOTIFICATIONS_KEY_TYPE=bigint
NOTIFICATIONS_SUBJECT_KEY_TYPE=
NOTIFICATIONS_CONTEXT_KEY_TYPE=
NOTIFICATIONS_PRIMARY_KEY_TYPE=bigint
NOTIFICATIONS_QUEUE_ENABLED=true
NOTIFICATIONS_QUEUE_CONNECTION=
NOTIFICATIONS_QUEUE_NAME=
NOTIFICATIONS_INBOX_RECHECK=false
NOTIFICATIONS_LOCK_STORE=redis
NOTIFICATIONS_PREFERENCES_URL=settings.notifications
NOTIFICATIONS_ROUTES_ENABLED=onV phpunit.xml píšte on/off (alebo 1/0): PHPUnit zmení false na prázdny reťazec, čo znamená „nenastavené“.
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.