---
title: "Preferencie — Notifications for Laravel | Roundly"
description: "Preferencie používateľa pre kanály, kategórie a druhy, povinné druhy, matica nastavení, update() všetko alebo nič, uloženie cez options a zámky."
url: https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel/preferencie
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Notifications for Laravel](https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel.md)

# Preferencie

Každý používateľ rozhoduje pre každý druh, kategóriu a kanál. Stlmenie predvolene zastaví len e-mail — schránka položku ponechá — a povinné druhy sa stlmiť nedajú vôbec:

```php
use RoundlyConsulting\Notifications\Enums\Channel;

$prefs = Notifications::preferences($user);        // or $user->notificationPreferences()

$prefs->mute('comment.posted');                    // mail only by default — the inbox keeps the item
$prefs->mute('comment.posted', Channel::Inbox);    // one channel (honoured only with inbox muting on)
$prefs->unmute('comment.posted');                  // back to the category and type default
$prefs->set('request.awaiting_approval', Channel::Mail, false);
$prefs->muteCategory('comments');
$prefs->unmuteCategory('comments');
$prefs->reset();                                    // every type and category override forgotten
$prefs->mute('security.alert');                     // MandatoryNotificationException
$prefs->muteCategory('comment');                    // UnknownNotificationCategoryException — no type uses it
```

## Výsledný kanál

Pre druh T, kanál C a používateľa U: C nie je v T.channels() → vypnuté; T.mandatory() → zapnuté; C je schránka a notifications.preferences.inbox\_mutable je vypnuté → zapnuté; inak prepis druhu → prepis kategórie → T.enabledByDefault(C). Ukladajú sa len prepisy, takže zmenená predvolená hodnota druhu sa dostane ku každému, kto ju nemenil.

- Stlmenie kategórie neumlčí povinný druh v nej; uložené stlmenie druhu, ktorý sa neskôr stal povinným, sa ignoruje.
- Kategória, ktorú žiadny zaregistrovaný druh nepoužíva, sa pri každom zápise odmietne s UnknownNotificationCategoryException — preklep nikdy potichu nestlmí nič.
- Každý zápis odstráni uložené prepisy nezaregistrovaných druhov a nepoužitých kategórií.

## Čítanie pre obrazovku nastavení

```php
$prefs->matrix();                                   // list<PreferenceRow{type: TypeDefinition, channels: list<ChannelPreference>}>
$prefs->enabled('comment.posted', Channel::Mail);   // bool
$prefs->muted('comment.posted');                    // mail off?
$prefs->overview();                                 // PreferencesOverview: rows, digest, quietHours, timezone
$prefs->digestPreference();                         // DigestPreferenceData
$prefs->quietHoursPreference();                     // ?QuietHours
$prefs->resolvedTimezone();                         // 'Europe/Bratislava'
```

ChannelPreference nesie channel, enabled, default a locked — zamknuté sú povinné druhy a schránka, ak nie je zapnuté jej stlmovanie.

## Viac zmien naraz

update() uloží celú obrazovku nastavení naraz alebo vôbec — používa ho PATCH /preferences. Zmení sa len to, čo update uvádza:

```php
use RoundlyConsulting\Notifications\DataTransferObjects\DigestPreferenceData;
use RoundlyConsulting\Notifications\DataTransferObjects\PreferencesUpdate;
use RoundlyConsulting\Notifications\DataTransferObjects\QuietHours;
use RoundlyConsulting\Notifications\Enums\DigestFrequency;

Notifications::preferences($user)->update(new PreferencesUpdate(
    channels: ['comment.posted' => ['mail' => false]],      // type → channel → on/off
    categories: ['contracts' => ['mail' => false]],         // false mutes, true clears the mute
    digest: new DigestPreferenceData(DigestFrequency::Daily, '08:00'),
    setsQuietHours: true, quietHours: new QuietHours('22:00', '07:00'),   // setsQuietHours + null clears
    setsTimezone: true, timezone: 'Europe/Bratislava',                    // setsTimezone + null clears
));
```

Najprv sa overí všetko — nezaregistrovaný druh, iný kanál než inbox či mail, vypnutý povinný druh, nepoužitá kategória, zlý čas alebo časové pásmo vyhodí výnimku skôr, než sa čokoľvek zapíše. Potom bežia všetky zápisy pod jedným zámkom preferencií v jednej transakcii, takže zlyhanie v polovici vráti všetky.

## Uloženie

Štyri options z options-for-laravel, ktoré balík registruje, každá s vlastným kľúčom. Vlastníkom je používateľ, preto sa options.key\_type musí zhodovať s notifications.key\_type. Čítanie aj zápis obchádzajú autorizáciu options — hranicou je API balíka a HTTP vrstva vždy pracuje len s prihláseným používateľom:

| Option | Kľúč | Hodnota |
| --- | --- | --- |
| `Options\ChannelPreferences` | `notifications.channels` | {"types": {"<key>": {"mail": false}}, "categories": {"<cat>": {"mail": false}}} |
| `Options\DigestPreference` | `notifications.digest` | {"frequency": "daily", "time": "07:30"} |
| `Options\QuietHoursPreference` | `notifications.quiet_hours` | {"start": "22:00", "end": "07:00"} |
| `Options\TimezonePreference` | `notifications.timezone` | IANA id |

## Súbežnosť a udalosti

Zápis je čítanie, úprava a zápis JSON mapy. Okolo celej transakcie drží cache zámok (notifications.preferences.lock\_store, na lock\_seconds) a uvoľní ho po commite — v transakcii aplikácie až po jej commite — takže dve súbežné stlmenia rôznych druhov prežijú obe. Store zámku musí byť zdieľaný medzi servermi; doctor upozorní na array a file. Každý zápis po commite spustí NotificationPreferenceChanged a zmeny súhrnu, tichých hodín či časového pásma v tej istej transakcii prečasujú podržané a odložené e-maily používateľa.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

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

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel.md)
