Skip to content

Commit f5130d3

Browse files
committed
Add handlers and subscribers
1 parent f305206 commit f5130d3

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/Builder.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
namespace PewPew\Hydrator\JMS;
66

7+
use JMS\Serializer\EventDispatcher\EventDispatcher;
8+
use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
9+
use JMS\Serializer\Handler\HandlerRegistry;
10+
use JMS\Serializer\Handler\SubscribingHandlerInterface;
711
use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
812
use JMS\Serializer\Serializer;
913
use JMS\Serializer\SerializerBuilder;
@@ -29,18 +33,35 @@ public function __construct(SerializerBuilder $builder)
2933
/**
3034
* @param array<class-string, non-empty-string> $configs Sets a map of
3135
* namespace prefixes to directories.
36+
* @param iterable<array-key, SubscribingHandlerInterface> $handlers List
37+
* of subscribing handlers.
38+
* @param iterable<array-key, EventSubscriberInterface> $subscribers List
39+
* of event subscribers.
3240
*
3341
* @psalm-suppress InternalClass
3442
* @psalm-suppress TooManyArguments
3543
*/
3644
public static function create(
3745
array $configs = [],
3846
bool $debug = false,
47+
iterable $handlers = [],
48+
iterable $subscribers = [],
3949
CacheItemPoolInterface $cache = null,
4050
): self {
4151
$builder = SerializerBuilder::create()
4252
->setDebug($debug)
43-
->setMetadataDirs($configs);
53+
->addDefaultHandlers()
54+
->setMetadataDirs($configs)
55+
->configureHandlers(static function (HandlerRegistry $registry) use ($handlers): void {
56+
foreach ($handlers as $handler) {
57+
$registry->registerSubscribingHandler($handler);
58+
}
59+
})
60+
->configureListeners(static function (EventDispatcher $dispatcher) use ($subscribers): void {
61+
foreach ($subscribers as $subscriber) {
62+
$dispatcher->addSubscriber($subscriber);
63+
}
64+
});
4465

4566
if ($cache !== null) {
4667
$builder->setMetadataCache(new MetadataPsrCacheAdapter('jms_hydrator', $cache));

0 commit comments

Comments
 (0)