---
title: "Konfigurácia — Events for Laravel | Roundly"
description: "Každý konfiguračný kľúč s premennou prostredia a predvolenou hodnotou — kľúče, tabuľky, modely, platby, check-in, plagáty, URL, API a notifikácie."
url: https://roundly-consulting.com/sk/open-source/navody/events-for-laravel/konfiguracia
language: sk
---

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

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

# Konfigurácia

Balík funguje bez akejkoľvek konfigurácie — každý kľúč má predvolenú hodnotu. config/events.php publikujte, len ak chcete niečo zmeniť:

```bash
php artisan vendor:publish --tag=events-config
```

Každá hodnota sa číta cez prísny čítač (Support\\EventsConfig): chybné trvanie, časové pásmo, názov tabuľky, šablóna URL či trieda vyhodí InvalidEventsConfigurationException (alebo InvalidConfigurationException z toolkitu) s názvom kľúča — nikdy sa potichu nepoužije náhradná hodnota.

- Prázdna hodnota znamená predvolenú.
- Boolean hodnoty prijímajú on/off, true/false, 1/0 a yes/no.
- Trvania sú v ISO-8601: PT30M, PT2H, P1D.
- Typy kľúčov a názvy tabuliek nastavte pred migráciou — určujú stĺpce.

## Konfiguračný súbor

```php
// config/events.php (imports and docblocks omitted)
return [
    'primary_key_type' => env('EVENTS_PRIMARY_KEY_TYPE', 'bigint'),
    'key_type' => env('EVENTS_KEY_TYPE', 'bigint'),

    'tables' => [
        'events' => 'events',
        'venues' => 'event_venues',
        'tiers' => 'event_admission_tiers',
        'rsvps' => 'event_rsvps',
        'hosts' => 'event_hosts',
        'invitations' => 'event_invitations',
        'reminder_deliveries' => 'event_reminder_deliveries',
    ],

    'models' => [
        'event' => Event::class,
        'venue' => Venue::class,
        'tier' => AdmissionTier::class,
        'rsvp' => Rsvp::class,
    ],

    'lifecycle' => EventLifecycle::class,

    'organizers' => ['user' => 'App\\Models\\User'],
    'attendees' => ['user' => 'App\\Models\\User'],

    'defaults' => [
        'timezone' => env('EVENTS_TIMEZONE'),
        'duration' => 'PT2H',
        'visibility' => 'public',
        'max_guests' => 0,
        'guest_list' => 'hidden',
        'show_counts' => true,
        'waitlist' => true,
    ],

    'schedule' => ['max_duration' => 'P31D'],

    'venues' => [
        'geocode_on_create' => env('EVENTS_GEOCODE_VENUES', 'off'),
        'default_timezone' => null,
    ],

    'geo' => ['max_radius_km' => 500, 'default_radius_km' => 25],

    'tags' => ['scope' => null],

    'tiers' => ['default_currency' => env('EVENTS_DEFAULT_CURRENCY')],

    'waitlist' => ['stop_promoting_before' => 'PT1H'],

    'payments' => [
        'collector' => NoPaymentCollector::class,
        'hold_for' => 'PT30M',
        'promotion_hold' => 'PT24H',
    ],

    'check_in' => [
        'opens_before' => 'PT3H',
        'closes_after' => 'PT2H',
        'url' => env('EVENTS_CHECK_IN_URL'),
    ],

    'poster' => [
        'bucket' => 'poster',
        'disk' => null,
        'max_kb' => 10240,
        'min_width' => 600,
        'min_height' => 315,
        'fallback_url' => env('EVENTS_POSTER_FALLBACK'),
        'variants' => [
            'thumb' => [400, 300],
            'card' => [800, 450],
            'square' => [1200, 1200],
            'landscape' => [1200, 900],
            'wide' => [1920, 1080],
        ],
    ],

    'urls' => [
        'resolver' => TemplateEventUrls::class,
        'event' => env('EVENTS_URL'),
        'event_link' => env('EVENTS_LINK_URL'),
        'invitation' => env('EVENTS_INVITATION_URL'),
        'rsvp' => env('EVENTS_RSVP_URL'),
    ],

    'seo' => [
        'json_ld' => [
            'type' => 'Event',
            'unlisted' => 'off',
            'expose_online_url' => 'off',
            'organizer_type' => 'Organization',
        ],
    ],

    'feeds' => [
        'keep_cancelled_for' => 'P30D',
        'max_events' => 500,
        'name' => env('APP_NAME', 'Events'),
    ],

    'resources' => [
        'organizer' => EventOrganizerResource::class,
        'host' => EventHostResource::class,
        'attendee' => EventAttendeeResource::class,
        'invitee' => EventInviteeResource::class,
        'actor' => EventActorResource::class,
        'venue_owner' => VenueOwnerResource::class,
    ],

    'routes' => [
        'enabled' => env('EVENTS_ROUTES') ?: 'off',
        'prefix' => 'api',
        'middleware' => ['api', 'throttle:events-api'],
        'auth_middleware' => ['auth'],
        'max_per_page' => 100,
        'rate_limits' => ['api' => 120, 'rsvp' => 20, 'check_in' => 300, 'feeds' => 60],
    ],

    'notifications' => [
        'enabled' => env('EVENTS_NOTIFICATIONS', 'on'),
        'channels' => ['mail'],
        'queue' => null,
        'notify_actor' => false,
        'types' => [
            'invited' => EventInvitationNotification::class,
            'confirmed' => RsvpConfirmedNotification::class,
            'waitlist_promoted' => WaitlistPromotedNotification::class,
            'reminder' => EventReminderNotification::class,
            'updated' => EventUpdatedNotification::class,
            'postponed' => EventPostponedNotification::class,
            'rescheduled' => EventRescheduledNotification::class,
            'cancelled' => EventCancelledNotification::class,
            'moved_online' => EventMovedOnlineNotification::class,
        ],
        'audiences' => [
            'reminder' => ['going'],
            'updated' => ['going', 'held'],
            'postponed' => ['going', 'held', 'waitlisted', 'interested'],
            'rescheduled' => ['going', 'held', 'waitlisted', 'interested'],
            'cancelled' => ['going', 'held', 'waitlisted', 'interested'],
            'moved_online' => ['going', 'held'],
        ],
    ],

    'reminders' => [
        'offsets' => [],
        'max_lateness' => 'PT1H',
        'all_day_at' => '09:00',
    ],

    'authorization' => [
        'register_policy' => true,
        'policy' => EventPolicy::class,
        'venue_policy' => VenuePolicy::class,
        'abilities' => [
            'create' => null,
            'admin' => 'events.admin',
            'venues' => null,
            'shared_venues' => null,
        ],
    ],

    'slugs' => [
        'history' => env('EVENTS_SLUG_HISTORY', 'off'),
        'max_length' => 120,
    ],
];
```

## Kľúče, tabuľky a modely

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `primary_key_type` | `EVENTS_PRIMARY_KEY_TYPE` | bigint | Kľúč tabuľky podujatí a každého stĺpca, ktorý ukazuje na podujatie — subjekty lifecycle, označené modely v tags, vlastníci médií, história slugov. bigint, uuid alebo ulid; musí sa rovnať lifecycle.key\_type a tags.key\_type (a pri zapnutej histórii slugov aj sluggable.key\_type). Nastavte ho pred migráciou. |
| `key_type` | `EVENTS_KEY_TYPE` | bigint | Každý stĺpec, ktorý ukazuje na vaše modely — organizátor, účastník, spoluorganizátor, pozvaný, pozývajúci, vlastník miesta konania, added\_by, checked\_in\_by. Musí sa rovnať typu kľúča vašich používateľov a lifecycle.actor\_key\_type (a pri štítkoch pre organizátora aj tags.key\_type). Nastavte ho pred migráciou. |
| `tables.events … tables.reminder_deliveries` | — | events, event\_venues, event\_admission\_tiers, event\_rsvps, event\_hosts, event\_invitations, event\_reminder\_deliveries | Názvy siedmich tabuliek, každý ^\[a-z\_\]\[a-z0-9\_\]{0,63}$. Premenujte ich pred migráciou — events je bežný názov tabuľky v aplikáciách. |
| `models.event / venue / tier / rsvp` | — | Event, Venue, AdmissionTier, Rsvp | Podtrieda modelu balíka; prázdna hodnota = model balíka. Čokoľvek iné vyhodí výnimku s názvom kľúča. |
| `lifecycle` | — | Lifecycle\\EventLifecycle | Stavový workflow: LifecycleDefinition, ktorá implementuje Contracts\\EventLifecycle — pozrite Stavy a životný cyklus. |
| `organizers` | — | \['user' => 'App\\Models\\User'\] | API alias => trieda, ktorá implementuje Organizer — zároveň triedy, ktorých sa pýta managedBy() v SQL, preto uveďte každú triedu organizátora vrátane tímov. Neexistujúca trieda sa preskočí. |
| `attendees` | — | \['user' => 'App\\Models\\User'\] | API alias => trieda účastníka; events:doctor upozorní na uvedené triedy, ktorým nemožno posielať notifikácie. Neexistujúca trieda sa preskočí. |

## Predvolené hodnoty nových podujatí

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `defaults.timezone` | `EVENTS_TIMEZONE` | null | Použije sa po explicitnom časovom pásme a pásme miesta konania; prázdna hodnota = app.timezone. Neplatný názov IANA vyhodí výnimku. |
| `defaults.duration` | — | PT2H | ISO-8601, keď nie je zadaný koniec ani trvanie — ends\_at nikdy nie je null. |
| `defaults.visibility` | — | public | public, unlisted alebo private. |
| `defaults.max_guests` | — | 0 | Hostia v rámci jedného RSVP. |
| `defaults.guest_list` | — | hidden | hidden, attendees alebo public. |
| `defaults.show_counts` | — | true | Zobrazovať divákom počty účastníkov. |
| `defaults.waitlist` | — | true | Plné podujatie zaradí na čakaciu listinu namiesto odmietnutia. |
| `schedule.max_duration` | — | P31D | Najdlhšie podujatie. |

## Miesta konania, geografia a štítky

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `venues.geocode_on_create` | `EVENTS_GEOCODE_VENUES` | off | Zaradí geokódovanie do frontu pre každé nové miesto konania bez súradníc. |
| `venues.default_timezone` | — | null | Miesto konania bez časového pásma dostane toto, inak app.timezone. |
| `geo.max_radius_km` | — | 500 | Najväčší polomer hľadania v okolí (0,001–20 038). |
| `geo.default_radius_km` | — | 25 | Polomer, keď nie je zadaný (≤ max\_radius\_km). |
| `tags.scope` | — | null | null = jeden globálny katalóg štítkov; organizer = samostatný pre každého organizátora. |

## Typy vstupeniek, čakacia listina, platby, check-in

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `tiers.default_currency` | `EVENTS_DEFAULT_CURRENCY` | null | Cena zadaná ako číslo sa číta v tejto mene; prázdna hodnota = money.default\_currency. |
| `waitlist.stop_promoting_before` | — | PT1H | Takto blízko pred začiatkom sa už automaticky neposúva. |
| `payments.collector` | — | Payments\\NoPaymentCollector | Váš Contracts\\CollectsAdmissionPayment. |
| `payments.hold_for` | — | PT30M | Ako dlho je platené miesto rezervované pre platiteľa — viac ako nula. |
| `payments.promotion_hold` | — | PT24H | Ako dlho je rezervované miesto posunuté z čakacej listiny — viac ako nula. |
| `check_in.opens_before` | — | PT3H | Skenovanie pri vstupe sa otvára takto dlho pred začiatkom (alebo otvorením dverí). |
| `check_in.closes_after` | — | PT2H | A zatvára sa takto dlho po skončení. |
| `check_in.url` | `EVENTS_CHECK_IN_URL` | null | Šablóna obsahu QR kódu s {code} (http alebo https); inak samotný kód. |

## Plagát

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `poster.bucket` | — | poster | Skupina v media-library. |
| `poster.disk` | — | null | Prázdna hodnota = predvolený disk media-library. |
| `poster.max_kb` | — | 10240 | Najväčší upload, najmenej 1. |
| `poster.min_width / min_height` | — | 600 / 315 | Najmenšie rozmery, každý najmenej 1. |
| `poster.fallback_url` | `EVENTS_POSTER_FALLBACK` | null | posterUrl() pre podujatie bez plagátu. |
| `poster.variants` | — | thumb 400×300, card 800×450, square 1200×1200, landscape 1200×900, wide 1920×1080 | názov => \[šírka, výška\], kladné celé čísla; webp, cover, vo fronte. JSON-LD používa square, landscape a wide. |

## URL, vyhľadávače, feedy

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `urls.resolver` | — | Support\\TemplateEventUrls | Váš Contracts\\EventUrls, ak chcete volať route(). |
| `urls.event` | `EVENTS_URL` | null | Šablóna stránky podujatia: {uuid}, {slug}, {locale}. |
| `urls.event_link` | `EVENTS_LINK_URL` | null | Podujatia len cez odkaz a súkromné, len cez uuid: {uuid}, {locale}. |
| `urls.invitation` | `EVENTS_INVITATION_URL` | null | Odkaz na prijatie: {token}, {locale}. |
| `urls.rsvp` | `EVENTS_RSVP_URL` | null | Stránka vstupenky účastníka: {uuid}, {rsvp}, {locale}. |
| `seo.json_ld.type` | — | Event | Názov typu schema.org (len písmená). |
| `seo.json_ld.unlisted` | — | off | Štruktúrované dáta aj pre podujatia len cez odkaz. |
| `seo.json_ld.expose_online_url` | — | off | Odkaz na pripojenie namiesto URL stránky vo VirtualLocation. |
| `seo.json_ld.organizer_type` | — | Organization | Alebo Person. |
| `feeds.keep_cancelled_for` | — | P30D | Zrušené podujatia zostávajú vo verejnom feede takto dlho. |
| `feeds.max_events` | — | 500 | 1–10 000. |
| `feeds.name` | `APP_NAME` | Events | Názov kalendára feedu; prázdna hodnota = Events. |

## API resources a routy

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `resources.organizer / host / attendee / invitee / actor / venue_owner` | — | resources {id, type} | Ľubovoľná inštanciovateľná podtrieda JsonResource; dostane model — pozrite JSON API. |
| `routes.enabled` | `EVENTS_ROUTES` | off | Nenastavený prepínač zostáva vypnutý — aj v publikovanom poli routes bez neho. |
| `routes.prefix` | — | api | Prefix URL. |
| `routes.middleware` | — | \['api', 'throttle:events-api'\] | Každá routa. |
| `routes.auth_middleware` | — | \['auth'\] | Zapisovacie routy; balík navyše odmietne zápis bez prihláseného Eloquent používateľa. |
| `routes.max_per_page` | — | 100 | 1–1000 (predvolená strana je 15 podujatí, 25 účastníkov alebo miest konania). |
| `routes.rate_limits.api / rsvp / check_in / feeds` | — | 120 / 20 / 300 / 60 | Za minútu, každý najmenej 1. |

## Notifikácie a pripomienky

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `notifications.enabled` | `EVENTS_NOTIFICATIONS` | on | Všetky notifikácie zapnuté alebo vypnuté. |
| `notifications.channels` | — | \['mail'\] | Napríklad \['mail', 'database'\]. |
| `notifications.queue` | — | null | Front, do ktorého idú notifikácie. |
| `notifications.notify_actor` | — | false | Upozorniť aj toho, kto zmenu urobil. |
| `notifications.types.<type>` | — | triedy balíka | Podtrieda triedy balíka alebo false (vypnuté). |
| `notifications.audiences.<type>` | — | pozrite Notifikácie | Kto sa dozvie o zmene celého podujatia, podľa stavu RSVP. |
| `reminders.offsets` | — | \[\] | Posuny pred začiatkom v ISO-8601; najviac päť, každý PT5M–P31D. Vlastný zoznam podujatia ho nahradí. |
| `reminders.max_lateness` | — | PT1H | Pripomienka oneskorená viac ako o toto sa zahodí. |
| `reminders.all_day_at` | — | 09:00 | Miestny čas (HH:MM), v ktorý sa pripomínajú celodenné podujatia. |

## Oprávnenia a slugy

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `authorization.register_policy` | — | true | Vypnuté: zaregistrujte vlastné policies (chýbajúca trieda nikdy nezastaví štart aplikácie). |
| `authorization.policy / venue_policy` | — | Policies\\EventPolicy / Policies\\VenuePolicy | Nahradenie podtriedou. |
| `authorization.abilities.create` | — | null | Gate oprávnenie, ktoré smie vytvárať podujatia; null = ktokoľvek prihlásený. |
| `authorization.abilities.admin` | — | events.admin | Spravovať akékoľvek podujatie; nedefinované = nikto. |
| `authorization.abilities.venues` | — | null | Gate oprávnenie, ktoré smie vytvárať miesta konania. |
| `authorization.abilities.shared_venues` | — | null | Gate oprávnenie, ktoré vytvára a spravuje zdieľané miesta konania (bez vlastníka); null = len administrátori. |
| `slugs.history` | `EVENTS_SLUG_HISTORY` | off | Zmenený slug naďalej funguje a presmeruje (vyžaduje sluggable-migrations). |
| `slugs.max_length` | — | 120 | 16–255. |

## Prostredie

Bežné nastavenia idú cez premenné prostredia, takže konfiguráciu publikovať takmer nemusíte:

```bash
EVENTS_KEY_TYPE=uuid
EVENTS_TIMEZONE=Europe/Bratislava
EVENTS_DEFAULT_CURRENCY=EUR
EVENTS_GEOCODE_VENUES=on
EVENTS_URL=https://example.com/{locale}/events/{slug}
EVENTS_LINK_URL=https://example.com/{locale}/e/{uuid}
EVENTS_INVITATION_URL=https://example.com/invitations/{token}
EVENTS_RSVP_URL=https://example.com/events/{uuid}/tickets/{rsvp}
EVENTS_CHECK_IN_URL=https://example.com/check-in/{code}
EVENTS_ROUTES=on
EVENTS_NOTIFICATIONS=on
EVENTS_SLUG_HISTORY=off
```

## 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/events-for-laravel.md)
