SerializerBuilder::create()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 10
nc 1
nop 0
1
<?php
2
3
namespace Eole\Sandstone\Serializer;
4
5
use Alcalyn\SerializerDoctrineProxies\DoctrineProxyHandler;
6
use Alcalyn\SerializerDoctrineProxies\DoctrineProxySubscriber;
7
use JMS\Serializer\EventDispatcher\EventDispatcher;
8
use JMS\Serializer\Handler\HandlerRegistryInterface;
9
use JMS\Serializer\SerializationContext;
10
use JMS\Serializer\SerializerBuilder as BaseSerializerBuilder;
11
12
class SerializerBuilder extends BaseSerializerBuilder
13
{
14
    /**
15
     * {@InheritDoc}
16
     *
17
     * Configure builder for Eole Api,
18
     * and use alcalyn/serializer-doctrine-proxies stuff,
19
     * which disable lazy loading during serialization.
20
     *
21
     * @return BaseSerializerBuilder
22
     */
23
    public static function create()
24
    {
25
        return parent::create()
26
            ->setSerializationContextFactory(array(self::class, 'createDefaultSerializationContext'))
27
            ->addDefaultHandlers()
28
            ->configureListeners(function (EventDispatcher $dispatcher) {
29
                $proxySubscriber = new DoctrineProxySubscriber(false);
30
                $dispatcher->addSubscriber($proxySubscriber);
31
            })
32
            ->configureHandlers(function (HandlerRegistryInterface $handlerRegistry) {
33
                $proxyHandler = new DoctrineProxyHandler();
34
                $handlerRegistry->registerSubscribingHandler($proxyHandler);
35
            })
36
        ;
37
    }
38
39
    /**
40
     * Create a default serialization context for Eole Api.
41
     *
42
     * @return SerializationContext
43
     */
44
    public static function createDefaultSerializationContext()
45
    {
46
        return SerializationContext::create()
47
            ->setSerializeNull(true)
48
            ->setGroups(array('Default'))
49
            ->enableMaxDepthChecks()
50
        ;
51
    }
52
}
53