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

Inštalácia

Pridajte balík, spustite jeho inštalátor a potom migrácie. Service provider sa objaví automaticky spolu s providermi balíkov Roundly, na ktorých stavia. Fasáda nemá globálny alias — importujte RoundlyConsulting\Events\Facades\Events:

composer require roundly-consulting/events-for-laravel
php artisan events:install
php artisan migrate

events:install odmietne pokračovať, kým existuje niektorá z nakonfigurovaných tabuliek — events je v aplikáciách bežný názov tabuľky (analytika, event sourcing) — a uvedie kľúč events.tables.*, ktorý treba zmeniť. Inak publikuje events-config a migrácie lifecycle-migrations, tags-migrations, media-migrations a events-migrations (pri zapnutej histórii slugov aj sluggable-migrations), už publikované súbory ponechá a vypíše typy kľúčov vedľa seba spolu s ďalšími krokmi.

1. Pred migráciou ujasnite typy kľúčov

Migrácie podľa dvoch typov kľúčov volia 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:

EVENTS_PRIMARY_KEY_TYPE=uuid   # events and every column pointing at one (= lifecycle.key_type, tags.key_type)
EVENTS_KEY_TYPE=uuid           # organizers, attendees, co-hosts, invitees, actors (= your users)
LIFECYCLE_KEY_TYPE=uuid
LIFECYCLE_ACTOR_KEY_TYPE=uuid
TAGS_KEY_TYPE=uuid
KonfiguráciaEnvUrčujeMusí sa rovnať
events.primary_key_typeEVENTS_PRIMARY_KEY_TYPEevents.id a každý stĺpec, ktorý ukazuje na podujatie (subjekty lifecycle, označené modely v tags, vlastníci médií, história slugov)lifecycle.key_type, tags.key_type (+ sluggable.key_type with slug history)
events.key_typeEVENTS_KEY_TYPEkaž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_bytyp kľúča vašich používateľov a lifecycle.actor_key_type

Pri events.tags.scope = organizer je organizátor rozsahom štítkov, preto sa events.key_type musí rovnať aj tags.key_type. Model, ktorého kľúč nesedí, sa odmietne ešte pred akýmkoľvek SQL s odkazom na events.key_type — PostgreSQL by inak odpovedal surovou chybou „invalid input syntax for type bigint“ — a events:doctor ohlási každý nesúlad.

2. Ak treba, premenujte tabuľky

Názov každej tabuľky je konfigurovateľný. Ak už vaša aplikácia tabuľku events má, premenujte ich pred inštaláciou:

// config/events.php — set before events:install and php artisan migrate
'tables' => [
    'events' => 'meetup_events',            // your app already has an events table
    'venues' => 'event_venues',
    'tiers' => 'event_admission_tiers',
    'rsvps' => 'event_rsvps',
    'hosts' => 'event_hosts',
    'invitations' => 'event_invitations',
    'reminder_deliveries' => 'event_reminder_deliveries',
],

3. Pridajte traity do modelov

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use RoundlyConsulting\Events\Concerns\AttendsEvents;
use RoundlyConsulting\Events\Concerns\OrganizesEvents;
use RoundlyConsulting\Events\Contracts\Organizer;

class User extends Authenticatable implements Organizer
{
    use AttendsEvents;     // $user->rsvp($event)->going(), isGoingTo(), eventFeed(), seats freed on deletion
    use Notifiable;        // notices
    use OrganizesEvents;   // the Organizer contract's defaults
}

AttendsEvents umožní modelu odpovedať na podujatia a čítať ich, OrganizesEvents dodá predvolené hodnoty kontraktu Organizer a Notifiable prijíma notifikácie. Potom uveďte modely, na ktoré sa API smie odvolávať, cez alias — tímom ako organizátorom sa venuje stránka Organizátori, spoluorganizátori a pozvánky:

// config/events.php — the aliases the JSON API uses, never class names
'organizers' => [
    'user' => App\Models\User::class,
    'team' => App\Models\Team::class,      // list every organizer class, teams included
],

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

4. Naplánujte sweepy

// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('events:sweep')->everyMinute();      // held seats expire, waitlists move up, reminders go out
Schedule::command('lifecycle:sweep')->everyMinute();   // finished events complete at their end

Do plánovača sa za vás nič nepridá. Bez events:sweep vypršia rezervované miesta až pri ďalšom zápise do ich podujatia a neodíde žiadna pripomienka; bez lifecycle:sweep sa skončené podujatia nikdy samy neukončia.

5. Skontrolujte inštaláciu

php artisan events:doctor
php artisan events:doctor --counts     # also compare every event's counters with a recount
php artisan events:doctor --json       # [{severity, check, message}]

Doctor spustite po inštalácii a po každej zmene konfigurácie — zoznam kontrol nájdete na stránke Artisan príkazy.

Bez inštalátora

php artisan vendor:publish --tag=events-config --tag=lifecycle-migrations \
    --tag=tags-migrations --tag=media-migrations --tag=events-migrations

Migrácie sa len publikujú — balík ich nikdy nenačíta sám — a časovú značku dostanú pri publikovaní.

TagKam sa publikuje
events-configconfig/events.php
events-migrationsSedem migrácií, …_0001_create_event_venues_table.php až …_0007_create_event_reminder_deliveries_table.php — s odstupom jednej sekundy; opätovné publikovanie trafí tie isté súbory.
events-translationslang/vendor/events/{en,sk}/*.php
events-viewsresources/views/vendor/events/json-ld.blade.php
events-routesroutes/events.php — keď existuje, načíta sa namiesto súboru balíka.
php artisan vendor:publish --tag=events-translations   # lang/vendor/events/{en,sk}/*.php
php artisan vendor:publish --tag=events-views          # resources/views/vendor/events/json-ld.blade.php
php artisan vendor:publish --tag=events-routes         # routes/events.php — loads instead of the package's

Jazyky a preklady

Názvy, popisy, názvy typov vstupeniek a miest konania aj slugy podujatí sú pre každý jazyk zvlášť cez translatable-for-laravel: zadajte mapu jazykov (['en' => 'Jazz Night', 'sk' => 'Jazzový večer']) alebo reťazec v aktuálnom jazyku; čítanie ide podľa aktuálneho jazyka a potom podľa záložného reťazca. Jazyky aplikácie musia byť v translatable.locales (predvolene en, sk) — inak označovanie podľa názvu vyhodí invalid_tag. Vlastné texty balíka sú v angličtine a slovenčine s rovnakými kľúčmi a ich menný priestor je events::. Súbory:

SúborObsahuje
enums.phpPopisy enumov (label()).
messages.phpKaždá správa výnimky a zamietnutia — message v API.
notifications.phpPredmety, oslovenia, texty a tlačidlá notifikácií.
validation.phpNázvy polí API vo validačných správach.
tags.phpPopisy dvoch typov štítkov.
feeds.phpTexty v kalendári — riadok s pripojením, názov osobného feedu.

Ak chcete zmeniť niektorý riadok alebo pridať jazyk, publikujte ich cez --tag=events-translations.

php artisan about

php artisan about --only=events

Sekcia Events ukáže podobu inštalácie — nikdy žiadne tajomstvo:

RiadokPríklad
Key typebigint (events), bigint (people)
LifecycleEventLifecycle
RoutesON / OFF
NotificationsON (mail, database) / OFF
RemindersP1D, PT2H / NONE
PaymentsNoPaymentCollector
GeocodingON / OFF
Slug historyON / 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

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.