Konfigurácia
Konfigurácia sa zlučuje, takže prepíšete len to, čo potrebujete — a väčšinu nastavení ovládate cez env. Publikovaný config/opening-hours.php:
use RoundlyConsulting\OpeningHours\Models\Calendar;
use RoundlyConsulting\OpeningHours\Models\ExceptionRule;
use RoundlyConsulting\OpeningHours\Models\Schedule;
return [
'key_type' => env('OPENING_HOURS_KEY_TYPE', 'bigint'),
'models' => [
'calendar' => Calendar::class,
'schedule' => Schedule::class,
'exception_rule' => ExceptionRule::class,
],
'default_calendar' => env('OPENING_HOURS_DEFAULT_CALENDAR', 'default'),
'timezone' => env('OPENING_HOURS_TIMEZONE'),
'first_day_of_week' => env('OPENING_HOURS_FIRST_DAY_OF_WEEK', 'monday'),
'search_days' => env('OPENING_HOURS_SEARCH_DAYS', 366),
'max_query_days' => env('OPENING_HOURS_MAX_QUERY_DAYS', 366),
'delete_with_owner' => env('OPENING_HOURS_DELETE_WITH_OWNER', true),
'limits' => [
'calendars' => 16, 'schedules' => 20, 'ranges_per_day' => 12, 'exceptions' => 1000,
'label_length' => 191, 'meta_bytes' => 4096, 'busy_periods' => 10000, 'slots' => 2000,
],
'cache' => [
'enabled' => env('OPENING_HOURS_CACHE_ENABLED', true),
'store' => env('OPENING_HOURS_CACHE_STORE'),
'ttl' => env('OPENING_HOURS_CACHE_TTL', 86400),
'prefix' => env('OPENING_HOURS_CACHE_PREFIX', 'opening-hours'),
],
'api' => ['expose_meta' => false, 'week_mode' => 'upcoming', 'upcoming_exceptions_days' => 60],
'prune' => [
'exceptions_after_days' => env('OPENING_HOURS_PRUNE_EXCEPTIONS_AFTER_DAYS'),
'trashed_after_days' => env('OPENING_HOURS_PRUNE_TRASHED_AFTER_DAYS'),
],
'materialize' => [
'enabled' => env('OPENING_HOURS_MATERIALIZE', false),
'days_ahead' => env('OPENING_HOURS_MATERIALIZE_DAYS_AHEAD', 60),
'days_behind' => env('OPENING_HOURS_MATERIALIZE_DAYS_BEHIND', 1),
'connection' => env('OPENING_HOURS_QUEUE_CONNECTION'),
'queue' => env('OPENING_HOURS_QUEUE'),
],
'facade_alias' => 'OpeningHours',
];Všetky kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
key_type | bigint | OPENING_HOURS_KEY_TYPE | Typ primárneho kľúča vlastníka (bigint, uuid, ulid); určuje typ stĺpca owner_id v migráciách. Iná hodnota vyhodí výnimku. |
models.calendar | Calendar::class | — | Model kalendára; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku). |
models.schedule | Schedule::class | — | Model rozvrhu; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku). |
models.exception_rule | ExceptionRule::class | — | Model výnimky; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku). |
default_calendar | default | OPENING_HOURS_DEFAULT_CALENDAR | Kľúč kalendára, ak žiadny nezadáte. |
timezone | null | OPENING_HOURS_TIMEZONE | Záložné časové pásmo pred app.timezone (len názvy IANA; nenastavená hodnota — null alebo prázdna — = app.timezone). |
first_day_of_week | monday | OPENING_HOURS_FIRST_DAY_OF_WEEK | Poradie dní vo forWeek(), forWeekOf() a v režime kalendárneho týždňa API. |
search_days | 366 | OPENING_HOURS_SEARCH_DAYS | Koľko miestnych dní po (alebo pred) danom dni hľadajú next*/previous* a nextAvailableSlot() (1–3660); ďalej vracajú null. |
max_query_days | 366 | OPENING_HOURS_MAX_QUERY_DAYS | Najdlhšie obdobie, ktoré môže pokryť dotaz na interval či hľadanie slotov (1–3660); nextAvailableSlot() a stavový zdroj sa doň zmestia samy. |
delete_with_owner | true | OPENING_HOURS_DELETE_WITH_OWNER | Odstráni kalendáre pri trvalom zmazaní vlastníka. |
limits.calendars | 16 | — | Pomenované kalendáre na vlastníka. |
limits.schedules | 20 | — | Rozvrhy na kalendár. |
limits.ranges_per_day | 12 | — | Rozsahy na deň v týždni / na výnimku. |
limits.exceptions | 1000 | — | Výnimky na kalendár. |
limits.label_length | 191 | — | Maximálna dĺžka popisu. |
limits.meta_bytes | 4096 | — | Maximálna veľkosť meta v JSON. |
limits.busy_periods | 10000 | — | Obsadené obdobia načítané pri jednom vyhodnotení dostupnosti. |
limits.slots | 2000 | — | Maximum slotov v jednom dotaze. |
cache.enabled | true | OPENING_HOURS_CACHE_ENABLED | Cachovať skompilované definície. |
cache.store | null | OPENING_HOURS_CACHE_STORE | Cache store (nenastavená hodnota — null alebo prázdna — = predvolený; nastavená hodnota musí byť reťazec). |
cache.ttl | 86400 | OPENING_HOURS_CACHE_TTL | Sekundy; null = navždy (prázdna hodnota z env sa považuje za nenastavenú, teda 86400). |
cache.prefix | opening-hours | OPENING_HOURS_CACHE_PREFIX | Prefix kľúčov v cache (reťazec; prázdna hodnota = nenastavená = opening-hours). |
api.expose_meta | false | — | Zahrnúť meta do API zdrojov. |
api.week_mode | upcoming | — | Týždeň v stavovom zdroji: upcoming (najbližších 7 dátumov) alebo calendar_week. |
api.upcoming_exceptions_days | 60 | — | Výhľad stavového zdroja (najviac max_query_days − 1) a štruktúrovaných dát. |
prune.exceptions_after_days | null | OPENING_HOURS_PRUNE_EXCEPTIONS_AFTER_DAYS | Odstrániť jednorazové výnimky, ktoré skončili pred N dňami (nenastavená hodnota — null alebo prázdna — = vypnuté). |
prune.trashed_after_days | null | OPENING_HOURS_PRUNE_TRASHED_AFTER_DAYS | Natrvalo zmazať soft-deleted riadky staršie ako N dní (nenastavená hodnota — null alebo prázdna — = vypnuté). |
materialize.enabled | false | OPENING_HOURS_MATERIALIZE | Udržiavať tabuľku opening_hours_intervals pre SQL scopy. |
materialize.days_ahead | 60 | OPENING_HOURS_MATERIALIZE_DAYS_AHEAD | Materializovaný horizont dopredu (dni). |
materialize.days_behind | 1 | OPENING_HOURS_MATERIALIZE_DAYS_BEHIND | Materializovaný horizont dozadu (dni). |
materialize.connection | null | OPENING_HOURS_QUEUE_CONNECTION | Queue connection materializačného jobu (nenastavená hodnota — null alebo prázdna — = predvolená; inak reťazec). |
materialize.queue | null | OPENING_HOURS_QUEUE | Fronta materializačného jobu (nenastavená hodnota — null alebo prázdna — = predvolená; inak reťazec). |
facade_alias | OpeningHours | — | Globálny alias fasády; null alebo zápis false (false, 0, off, no) ho vypne; prázdna hodnota sa považuje za nenastavenú a ponechá OpeningHours. |
Hodnoty z env prichádzajú ako reťazce a pri čítaní sa validujú: prepínače (delete_with_owner, cache.enabled, materialize.enabled, api.expose_meta) prijímajú true/1/on/yes alebo false/0/off/no, číselné kľúče celé čísla vo svojom rozsahu a key_type, first_day_of_week a api.week_mode jednu z uvedených hodnôt. Prázdna hodnota ('' či len medzery, čo dá samotný riadok OPENING_HOURS_SEARCH_DAYS=) sa považuje za nenastavenú a dostane predvolenú hodnotu z tabuľky. Čokoľvek iné — preklep ako OPENING_HOURS_CACHE_ENABLED=disabled či OPENING_HOURS_SEARCH_DAYS=abc, cache store, prefix, fronta či connection, ktoré nie sú reťazcom, alebo časové pásmo, ktoré nie je reťazcom — vyhodí InvalidConfigurationException z toolkitu, namiesto toho, aby sa potichu použila predvolená hodnota.
null si zachováva zdokumentovaný význam: predvolený store, connection či frontu, app.timezone pri timezone, navždy pri cache.ttl, vypnuté pri prune.* a žiadny alias pri facade_alias. Prázdna hodnota znamená to isté ako null, okrem cache.ttl, kde ponechá 86400, a facade_alias, kde ponechá OpeningHours.
Prostredie (env)
Všetky kľúče ovládané cez env na jednom mieste:
OPENING_HOURS_KEY_TYPE=bigint
OPENING_HOURS_DEFAULT_CALENDAR=default
OPENING_HOURS_TIMEZONE=Europe/Bratislava
OPENING_HOURS_FIRST_DAY_OF_WEEK=monday
OPENING_HOURS_SEARCH_DAYS=366
OPENING_HOURS_MAX_QUERY_DAYS=366
OPENING_HOURS_DELETE_WITH_OWNER=true
OPENING_HOURS_CACHE_ENABLED=true
OPENING_HOURS_CACHE_STORE=redis
OPENING_HOURS_CACHE_TTL=86400
OPENING_HOURS_CACHE_PREFIX=opening-hours
OPENING_HOURS_PRUNE_EXCEPTIONS_AFTER_DAYS=30
OPENING_HOURS_PRUNE_TRASHED_AFTER_DAYS=90
OPENING_HOURS_MATERIALIZE=true
OPENING_HOURS_MATERIALIZE_DAYS_AHEAD=60
OPENING_HOURS_MATERIALIZE_DAYS_BEHIND=1
OPENING_HOURS_QUEUE_CONNECTION=redis
OPENING_HOURS_QUEUE=opening-hoursphp artisan about
Balík pridá do php artisan about sekciu Opening-hours: tri triedy modelov, typ kľúča, predvolený kalendár a časové pásmo, počet dní hľadania, zapnutie cache, cache store (zobrazený len ako default alebo custom), zapnutie materializácie a alias fasády. Chybné nastavenie, okrem triedy modelu, sa zobrazí ako INVALID, takže príkaz funguje aj pri nesprávnej konfigurácii.
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.