---
title: "DI a akcie — Opening Hours for Laravel | Roundly"
description: "Namiesto fasády injektujte OpeningHoursManager alebo zavolajte akciu priamo — mapa fasáda → akcia a čo fake vidí a čo nie."
url: https://roundly-consulting.com/sk/open-source/navody/opening-hours-for-laravel/bez-fasady
language: sk
---

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

[Opening Hours for Laravel](https://roundly-consulting.com/sk/open-source/navody/opening-hours-for-laravel.md)

# DI a akcie

Fasáda je odporúčaná voľba, nie jediná cesta. Tri rovnocenné vstupné body spúšťajú rovnaký kód:

- Fasáda OpeningHours — najkratší zápis, ktorý používa celá táto dokumentácia.
- Manažér RoundlyConsulting\\OpeningHours\\OpeningHoursManager — koreň fasády, injektovaný cez konštruktor. Rovnaké API, explicitná závislosť a žiadne statické volania. Je registrovaný ako scoped, takže jedna inštancia (a jedno memo) slúži celému requestu alebo jobu.
- Akcie — jednoúčelové triedy s metódou execute(), ktoré zapojíte do vlastných akcií, jobov a príkazov.

## Injektovanie manažéra alebo volanie akcie

```php
use RoundlyConsulting\OpeningHours\Actions\AddExceptionAction;
use RoundlyConsulting\OpeningHours\DataTransferObjects\ExceptionData;
use RoundlyConsulting\OpeningHours\OpeningHoursManager;

final class CloseForHoliday
{
    public function __construct(private OpeningHoursManager $hours) {}

    public function __invoke(Clinic $clinic, string $date): void
    {
        $this->hours->exceptions($clinic)->closed($date, label: 'Holiday');
    }
}

// The raw action — no relation reset, no fake:
app(AddExceptionAction::class)->execute($clinic->openingHoursCalendar(), ExceptionData::make('2026-12-24'));
```

OpeningHours::fake() vymení okrem fasády aj väzbu v kontajneri, takže sa zaznamená aj manažér injektovaný cez konštruktor a trait vlastníka. Akcia volaná priamo zapisuje naozaj — bez resetu vzťahu a bez fake.

OpeningHoursManager nie je final: vytvorte podtriedu, zaregistrujte ju v kontajneri a zmeníte jeho správanie. Manažér resolvuje akcie pri každom volaní, takže balík rešpektuje aj vašu vlastnú väzbu akcie.

## Metóda fasády → akcia

| Metóda fasády | Akcia |
| --- | --- |
| `sync($owner, $data) · edit()->save() · setOpeningHours()` | `SyncCalendarAction::execute($owner, CalendarData, $key, ?$expectedRevision)` |
| `exceptions($owner)->add() · closed() · open()` | `AddExceptionAction::execute(Calendar, ExceptionData)` |
| `exceptions($owner)->remove($ruleId)` | `RemoveExceptionAction::execute(Calendar, int $ruleId)` |
| `delete($owner, force:)` | `DeleteCalendarAction::execute(Calendar, bool $force)` |
| `refresh($owner)` | `BumpRevisionAction::execute(int $calendarId)` |

Čítania — for(), calendar(), has(), exceptions()->all(), validate(), definitionData() — vlastnú akciu nemajú. PruneAction a MaterializeIntervalsAction sú @internal: spúšťajte ich cez opening-hours:prune a opening-hours:materialize (alebo MaterializeIntervalsJob), nie z vlastného kódu. AddExceptionAction, RemoveExceptionAction a DeleteCalendarAction prijímajú hlavičku Calendar — vráti ju OpeningHours::calendar($owner).

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