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

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_typebigintOPENING_HOURS_KEY_TYPETyp 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.calendarCalendar::class—Model kalendára; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku).
models.scheduleSchedule::class—Model rozvrhu; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku).
models.exception_ruleExceptionRule::class—Model výnimky; môžete ho nahradiť podtriedou (čokoľvek iné vyhodí výnimku).
default_calendardefaultOPENING_HOURS_DEFAULT_CALENDARKľúč kalendára, ak žiadny nezadáte.
timezonenullOPENING_HOURS_TIMEZONEZáložné časové pásmo pred app.timezone (len názvy IANA; nenastavená hodnota — null alebo prázdna — = app.timezone).
first_day_of_weekmondayOPENING_HOURS_FIRST_DAY_OF_WEEKPoradie dní vo forWeek(), forWeekOf() a v režime kalendárneho týždňa API.
search_days366OPENING_HOURS_SEARCH_DAYSKoľko miestnych dní po (alebo pred) danom dni hľadajú next*/previous* a nextAvailableSlot() (1–3660); ďalej vracajú null.
max_query_days366OPENING_HOURS_MAX_QUERY_DAYSNajdlhš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_ownertrueOPENING_HOURS_DELETE_WITH_OWNEROdstráni kalendáre pri trvalom zmazaní vlastníka.
limits.calendars16—Pomenované kalendáre na vlastníka.
limits.schedules20—Rozvrhy na kalendár.
limits.ranges_per_day12—Rozsahy na deň v týždni / na výnimku.
limits.exceptions1000—Výnimky na kalendár.
limits.label_length191—Maximálna dĺžka popisu.
limits.meta_bytes4096—Maximálna veľkosť meta v JSON.
limits.busy_periods10000—Obsadené obdobia načítané pri jednom vyhodnotení dostupnosti.
limits.slots2000—Maximum slotov v jednom dotaze.
cache.enabledtrueOPENING_HOURS_CACHE_ENABLEDCachovať skompilované definície.
cache.storenullOPENING_HOURS_CACHE_STORECache store (nenastavená hodnota — null alebo prázdna — = predvolený; nastavená hodnota musí byť reťazec).
cache.ttl86400OPENING_HOURS_CACHE_TTLSekundy; null = navždy (prázdna hodnota z env sa považuje za nenastavenú, teda 86400).
cache.prefixopening-hoursOPENING_HOURS_CACHE_PREFIXPrefix kľúčov v cache (reťazec; prázdna hodnota = nenastavená = opening-hours).
api.expose_metafalse—Zahrnúť meta do API zdrojov.
api.week_modeupcoming—Týždeň v stavovom zdroji: upcoming (najbližších 7 dátumov) alebo calendar_week.
api.upcoming_exceptions_days60—Výhľad stavového zdroja (najviac max_query_days − 1) a štruktúrovaných dát.
prune.exceptions_after_daysnullOPENING_HOURS_PRUNE_EXCEPTIONS_AFTER_DAYSOdstrániť jednorazové výnimky, ktoré skončili pred N dňami (nenastavená hodnota — null alebo prázdna — = vypnuté).
prune.trashed_after_daysnullOPENING_HOURS_PRUNE_TRASHED_AFTER_DAYSNatrvalo zmazať soft-deleted riadky staršie ako N dní (nenastavená hodnota — null alebo prázdna — = vypnuté).
materialize.enabledfalseOPENING_HOURS_MATERIALIZEUdržiavať tabuľku opening_hours_intervals pre SQL scopy.
materialize.days_ahead60OPENING_HOURS_MATERIALIZE_DAYS_AHEADMaterializovaný horizont dopredu (dni).
materialize.days_behind1OPENING_HOURS_MATERIALIZE_DAYS_BEHINDMaterializovaný horizont dozadu (dni).
materialize.connectionnullOPENING_HOURS_QUEUE_CONNECTIONQueue connection materializačného jobu (nenastavená hodnota — null alebo prázdna — = predvolená; inak reťazec).
materialize.queuenullOPENING_HOURS_QUEUEFronta materializačného jobu (nenastavená hodnota — null alebo prázdna — = predvolená; inak reťazec).
facade_aliasOpeningHours—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-hours

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