|
18 | 18 | use Zenstruck\Foundry\Exception\PersistenceNotAvailable;
|
19 | 19 | use Zenstruck\Foundry\Factory;
|
20 | 20 | use Zenstruck\Foundry\FactoryCollection;
|
| 21 | +use Zenstruck\Foundry\Event\AfterPersist; |
21 | 22 | use Zenstruck\Foundry\ObjectFactory;
|
22 | 23 | use Zenstruck\Foundry\Persistence\Exception\NotEnoughObjects;
|
23 | 24 | use Zenstruck\Foundry\Persistence\Exception\RefreshObjectFailed;
|
@@ -406,19 +407,30 @@ final protected function isPersisting(): bool
|
406 | 407 | return $this->persistMode()->isPersisting();
|
407 | 408 | }
|
408 | 409 |
|
409 |
| - /** |
410 |
| - * Schedule any new object for insert right after instantiation. |
411 |
| - * @internal |
412 |
| - */ |
413 | 410 | final protected function initializeInternal(): static
|
414 | 411 | {
|
415 |
| - return $this->afterInstantiate( |
416 |
| - static function(object $object, array $parameters, PersistentObjectFactory $factory): void { |
417 |
| - if (!$factory->isPersisting()) { |
418 |
| - return; |
| 412 | + // Schedule any new object for insert right after instantiation |
| 413 | + $factory = parent::initializeInternal() |
| 414 | + ->afterInstantiate( |
| 415 | + static function(object $object, array $parameters, PersistentObjectFactory $factoryUsed): void { |
| 416 | + if (!$factoryUsed->isPersisting()) { |
| 417 | + return; |
| 418 | + } |
| 419 | + |
| 420 | + Configuration::instance()->persistence()->scheduleForInsert($object); |
419 | 421 | }
|
420 |
| - |
421 |
| - Configuration::instance()->persistence()->scheduleForInsert($object); |
| 422 | + ); |
| 423 | + |
| 424 | + if (!Configuration::instance()->hasEventDispatcher()) { |
| 425 | + return $factory; |
| 426 | + }; |
| 427 | + |
| 428 | + // Dispatch event after persist |
| 429 | + return $factory->afterPersist( |
| 430 | + static function(object $object, array $parameters, self $factoryUsed): void { |
| 431 | + Configuration::instance()->eventDispatcher()->dispatch( |
| 432 | + new AfterPersist($object, $parameters, $factoryUsed) |
| 433 | + ); |
422 | 434 | }
|
423 | 435 | );
|
424 | 436 | }
|
|
0 commit comments