diff --git a/.docs/README.md b/.docs/README.md deleted file mode 100644 index 8915806..0000000 --- a/.docs/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Nextras ORM Events - -Doctrine-like events for Nextras ORM entity lifecycle. - -## Content - -- [Setup](#setup) -- [Usage](#usage) - - [Listener](#listener) - - [Entity](#entity) -- [Real example](#real-example) - -## Setup - -Install package - -```bash -composer require contributte/nextras-orm-events -``` - -RegisterExtension - -```neon -extensions: - orm.events: Contributte\Nextras\Orm\Events\DI\NextrasOrmEventsExtension -``` - -## Usage - -### Listener - -Create listener - -```php -namespace App\Model; - -use Contributte\Nextras\Orm\Events\Listeners\BeforePersistListener as BaseBeforePersistListener; -use Nextras\Orm\Entity\IEntity; - -final class BeforePersistListener implements BaseBeforePersistListener -{ - - public function onBeforePersist(IEntity $entity): void - { - // ... - } - -} -``` - -Register it - -```neon -services: - - App\Model\ExampleBeforePersistListener -``` - -### Entity - -Just add annotation `@` to your entity or to trait which entity uses. - -```php -/** - * @BeforeInsert(App\Model\BeforeInsertListener) - * @BeforePersist(App\Model\BeforePersistListener) - * @BeforeRemove(App\Model\BeforeRemoveListener) - * @BeforeUpdate(App\Model\BeforeUpdateListener) - * @AfterInsert(App\Model\AfterInsertListener) - * @AfterPersist(App\Model\AfterPersistListener) - * @AfterRemove(App\Model\AfterRemoveListener) - * @AfterUpdate(App\Model\AfterUpdateListener) - * @Flush(App\Model\FlushListener) - * - * @Lifecycle(App\Model\LifecycleListener) - */ -class Foo extends Entity -{ -} -``` - -## Real example - -```neon -service: - - App\Model\FooBeforeInsertListener -``` - -```php -/** - * @BeforeInsert(App\Model\FooBeforeInsertListener) - */ -class Foo extends Entity -{ -} -``` - -```php -// Generated container.. - -/** - * @return FooRepository - */ -public function createServiceOrm__repositories__foo() -{ - $service = new FooRepository( - $this->getService('orm.mappers.foo'), - $this->getService('orm.dependencyProvider') - ); - $service->setModel($this->getService('orm.model')); - - // ===== attaching events (provided by extension ===== - - $service->onBeforeInsert[] = [ - $this->getService('App\Model\FooBeforeInsertListener'), - 'onBeforeInsert', - ]; - - // ===== attaching events ============================ - - return $service; -} -``` diff --git a/README.md b/README.md index ec91a8b..8a3c747 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,16 @@ Website 🚀 contributte.org | Contact 👨🏻‍💻 f3l1x.io | Twitter 🐦 @contributte

-## Usage +Doctrine-like events for Nextras ORM entity lifecycle hooks. + +## Versions + +| State | Version | Branch | Nette | PHP | +|----------|---------|--------------|--------|---------| +| dev | `^0.10` | `master` | `3.4+` | `>=8.1` | +| stable | `^0.9` | `master` | `3.1+` | `>=8.1` | + +## Installation To install latest version of `contributte/nextras-orm-events` use [Composer](https://getcomposer.org). @@ -26,16 +35,108 @@ To install latest version of `contributte/nextras-orm-events` use [Composer](htt composer require contributte/nextras-orm-events ``` -## Documentation +Register extension in your configuration. -For details on how to use this package, check out our [documentation](.docs). +```neon +extensions: + orm.events: Contributte\Nextras\Orm\Events\DI\NextrasOrmEventsExtension +``` -## Versions +## Usage -| State | Version | Branch | Nette | PHP | -|----------|---------|--------------|--------|---------| -| dev | `^0.10` | `master` | `3.4+` | `>=8.1` | -| stable | `^0.9` | `master` | `3.1+` | `>=8.1` | +### Listener + +Create listener. + +```php +namespace App\Model; + +use Contributte\Nextras\Orm\Events\Listeners\BeforePersistListener as BaseBeforePersistListener; +use Nextras\Orm\Entity\IEntity; + +final class BeforePersistListener implements BaseBeforePersistListener +{ + + public function onBeforePersist(IEntity $entity): void + { + // ... + } + +} +``` + +Register it. + +```neon +services: + - App\Model\ExampleBeforePersistListener +``` + +### Entity + +Add lifecycle annotations to your entity or to a trait used by your entity. + +```php +/** + * @BeforeInsert(App\Model\BeforeInsertListener) + * @BeforePersist(App\Model\BeforePersistListener) + * @BeforeRemove(App\Model\BeforeRemoveListener) + * @BeforeUpdate(App\Model\BeforeUpdateListener) + * @AfterInsert(App\Model\AfterInsertListener) + * @AfterPersist(App\Model\AfterPersistListener) + * @AfterRemove(App\Model\AfterRemoveListener) + * @AfterUpdate(App\Model\AfterUpdateListener) + * @Flush(App\Model\FlushListener) + * + * @Lifecycle(App\Model\LifecycleListener) + */ +class Foo extends Entity +{ +} +``` + +## Real Example + +```neon +services: + - App\Model\FooBeforeInsertListener +``` + +```php +/** + * @BeforeInsert(App\Model\FooBeforeInsertListener) + */ +class Foo extends Entity +{ +} +``` + +```php +// Generated container.. + +/** + * @return FooRepository + */ +public function createServiceOrm__repositories__foo() +{ + $service = new FooRepository( + $this->getService('orm.mappers.foo'), + $this->getService('orm.dependencyProvider') + ); + $service->setModel($this->getService('orm.model')); + + // ===== attaching events (provided by extension) ===== + + $service->onBeforeInsert[] = [ + $this->getService('App\Model\FooBeforeInsertListener'), + 'onBeforeInsert', + ]; + + // ===== attaching events ============================= + + return $service; +} +``` ## Development