diff --git a/cs/docs/index.md b/cs/docs/index.md index 14737cb..14f53b4 100644 --- a/cs/docs/index.md +++ b/cs/docs/index.md @@ -13,5 +13,6 @@ Příručka vás seznámí se všemy aspekty Lean Mapperu a pomůže vám vytě 7. [EntityFactory](entity-factory/) 8. [Integrace Lean Mapperu do aplikace](integrace-do-aplikace/) 9. [SQL strategie](sql-strategie/) +10. [Systém událostí](system-udalosti/) [Entity »](entity/) | diff --git a/cs/docs/sql-strategie.md b/cs/docs/sql-strategie.md index d980090..36271d0 100644 --- a/cs/docs/sql-strategie.md +++ b/cs/docs/sql-strategie.md @@ -59,4 +59,4 @@ Všimněte si dovětku `#union`, který zakončuje definici vazby - validní jso Při použití filtrů je každý filtr aplikován na každou samostatnou část UNION dotazu - viz příklad výše, kdy je filtrem přidána klauzule `LIMIT` do každé části dotazu. -[« Integrace Lean Mapperu do aplikace](/cs/docs/integrace-do-aplikace/) | +[« Integrace Lean Mapperu do aplikace](/cs/docs/integrace-do-aplikace/) | [Systém událostí »](/cs/docs/system-udalosti/) diff --git a/cs/docs/system-udalosti.md b/cs/docs/system-udalosti.md new file mode 100644 index 0000000..1b0e26b --- /dev/null +++ b/cs/docs/system-udalosti.md @@ -0,0 +1,62 @@ +--- +title: Systém událostí +--- + +* [Úvod](#page-title) +* [Registrace událostí](#toc-registrace) + * [Metoda initEvents()](#toc-initEvents) +* [Události](#toc-udalosti) + + +[Repositáře](/cs/docs/repositare/) v Lean Mapperu nabízejí jednoduchý systém událostí, který umožňuje reagovat na vytvoření entity, její aktualizaci, nebo smazání. + + +## Registrace událostí {#toc-registrace} + +Jako obsluhu události vždy registrujeme nějaký callback - může se jednat o anonymní funkci, metodu objektu apod. Každá zaregistrovaná obslužná funkce dostane jako parametr entitu, se kterou se pracuje. + +``` php?start_inline=1 +$authorRepository = new AuthorRepository($connection, $mapper, $entityFactory); + +$authorRepository->onBeforePersist[] = function (Author $author) { + // obsluha udalosti +}; +$authorRepository->onAfterCreate[] = array($obj, 'method'); +$authorRepository->onBeforeDelete[] = 'Class::method'; +``` + +Pro každou událost je možné zaregistrovat více obsluh, v takovém případě se volají postupně. + + +### Metoda initEvents() {#toc-initEvents} + +Velmi užitečná je protected metoda `LeanMapper\Repository::initEvents`, která se volá při vytváření instance repositáře a její přetížení umožňuje nadefinovat události pro daný repositář. + +``` php?start_inline=1 +class AuthorRepository extends LeanMapper\Repository +{ + protected function initEvents() + { + $this->onBeforePersist[] = ...; + $this->onAfterPersist[] = ...; + } +} +``` + + +## Události {#toc-udalosti} + +Pracovat lze s následujícími událostmi: + +* onBeforePersist +* onBeforeCreate +* onBeforeUpdate +* onBeforeDelete +* onAfterPersist +* onAfterCreate +* onAfterUpdate +* onAfterDelete + +Význam událostí je doufejme dostatečně zřejmý z jejich názvu. Za zmínku stojí, že při persistenci se `beforePersist` a `afterPersist` zavolají vždy, zatímco `beforeCreate`, `afterCreate`, `beforeUpdate` a `afterUpdate` se volají podle situace a podle toho, zda byla nějaká data změněna. + +[« SQL strategie](/cs/docs/sql-strategie/) | diff --git a/cs/index.md b/cs/index.md index 0fb2eab..037d7c4 100644 --- a/cs/index.md +++ b/cs/index.md @@ -14,6 +14,7 @@ redirect_from: "/dokumentace/" 7. [EntityFactory](/cs/docs/entity-factory/) 8. [Integrace Lean Mapperu do aplikace](/cs/docs/integrace-do-aplikace/) 9. [SQL strategie](/cs/docs/sql-strategie/) + 10. [Systém událostí](/cs/docs/system-udalosti/) * [Ukázky použití a zajímavá řešení](/cs/tutorials/) * [Changelog](/cs/changelog/) * [Download](/cs/download/)