3286f3d02ff705df065487fc95a6bc6573dbac16
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Fixtures / containers / container_almost_circular.php
1 <?php
2
3 use Symfony\Component\DependencyInjection\ContainerBuilder;
4 use Symfony\Component\DependencyInjection\Definition;
5 use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
6 use Symfony\Component\DependencyInjection\Reference;
7
8 $public = 'public' === $visibility;
9 $container = new ContainerBuilder();
10
11 // same visibility for deps
12
13 $container->register('foo', FooCircular::class)->setPublic(true)
14    ->addArgument(new Reference('bar'));
15
16 $container->register('bar', BarCircular::class)->setPublic($public)
17     ->addMethodCall('addFoobar', array(new Reference('foobar')));
18
19 $container->register('foobar', FoobarCircular::class)->setPublic($public)
20     ->addArgument(new Reference('foo'));
21
22 // mixed visibility for deps
23
24 $container->register('foo2', FooCircular::class)->setPublic(true)
25    ->addArgument(new Reference('bar2'));
26
27 $container->register('bar2', BarCircular::class)->setPublic(!$public)
28     ->addMethodCall('addFoobar', array(new Reference('foobar2')));
29
30 $container->register('foobar2', FoobarCircular::class)->setPublic($public)
31     ->addArgument(new Reference('foo2'));
32
33 // simple inline setter with internal reference
34
35 $container->register('bar3', BarCircular::class)->setPublic(true)
36     ->addMethodCall('addFoobar', array(new Reference('foobar3'), new Reference('foobar3')));
37
38 $container->register('foobar3', FoobarCircular::class)->setPublic($public);
39
40 // loop with non-shared dep
41
42 $container->register('foo4', 'stdClass')->setPublic($public)
43     ->setShared(false)
44     ->setProperty('foobar', new Reference('foobar4'));
45
46 $container->register('foobar4', 'stdClass')->setPublic(true)
47     ->addArgument(new Reference('foo4'));
48
49 // loop on the constructor of a setter-injected dep with property
50
51 $container->register('foo5', 'stdClass')->setPublic(true)
52     ->setProperty('bar', new Reference('bar5'));
53
54 $container->register('bar5', 'stdClass')->setPublic($public)
55     ->addArgument(new Reference('foo5'))
56     ->setProperty('foo', new Reference('foo5'));
57
58 // doctrine-like event system + some extra
59
60 $container->register('manager', 'stdClass')->setPublic(true)
61     ->addArgument(new Reference('connection'));
62
63 $container->register('logger', 'stdClass')->setPublic(true)
64     ->addArgument(new Reference('connection'))
65     ->setProperty('handler', (new Definition('stdClass'))->addArgument(new Reference('manager')))
66 ;
67 $container->register('connection', 'stdClass')->setPublic(true)
68     ->addArgument(new Reference('dispatcher'))
69     ->addArgument(new Reference('config'));
70
71 $container->register('config', 'stdClass')->setPublic(false)
72     ->setProperty('logger', new Reference('logger'));
73
74 $container->register('dispatcher', 'stdClass')->setPublic($public)
75     ->setLazy($public)
76     ->setProperty('subscriber', new Reference('subscriber'));
77
78 $container->register('subscriber', 'stdClass')->setPublic(true)
79     ->addArgument(new Reference('manager'));
80
81 // doctrine-like event system + some extra (bis)
82
83 $container->register('manager2', 'stdClass')->setPublic(true)
84     ->addArgument(new Reference('connection2'));
85
86 $container->register('logger2', 'stdClass')->setPublic(false)
87     ->addArgument(new Reference('connection2'))
88     ->setProperty('handler2', (new Definition('stdClass'))->addArgument(new Reference('manager2')))
89 ;
90 $container->register('connection2', 'stdClass')->setPublic(true)
91     ->addArgument(new Reference('dispatcher2'))
92     ->addArgument(new Reference('config2'));
93
94 $container->register('config2', 'stdClass')->setPublic(false)
95     ->setProperty('logger2', new Reference('logger2'));
96
97 $container->register('dispatcher2', 'stdClass')->setPublic($public)
98     ->setLazy($public)
99     ->setProperty('subscriber2', new Reference('subscriber2'));
100
101 $container->register('subscriber2', 'stdClass')->setPublic(false)
102     ->addArgument(new Reference('manager2'));
103
104 // private service involved in a loop
105
106 $container->register('foo6', 'stdClass')
107     ->setPublic(true)
108     ->setProperty('bar6', new Reference('bar6'));
109
110 $container->register('bar6', 'stdClass')
111     ->setPublic(false)
112     ->addArgument(new Reference('foo6'));
113
114 $container->register('baz6', 'stdClass')
115     ->setPublic(true)
116     ->setProperty('bar6', new Reference('bar6'));
117
118 return $container;