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;
8 $public = 'public' === $visibility;
9 $container = new ContainerBuilder();
11 // same visibility for deps
13 $container->register('foo', FooCircular::class)->setPublic(true)
14 ->addArgument(new Reference('bar'));
16 $container->register('bar', BarCircular::class)->setPublic($public)
17 ->addMethodCall('addFoobar', array(new Reference('foobar')));
19 $container->register('foobar', FoobarCircular::class)->setPublic($public)
20 ->addArgument(new Reference('foo'));
22 // mixed visibility for deps
24 $container->register('foo2', FooCircular::class)->setPublic(true)
25 ->addArgument(new Reference('bar2'));
27 $container->register('bar2', BarCircular::class)->setPublic(!$public)
28 ->addMethodCall('addFoobar', array(new Reference('foobar2')));
30 $container->register('foobar2', FoobarCircular::class)->setPublic($public)
31 ->addArgument(new Reference('foo2'));
33 // simple inline setter with internal reference
35 $container->register('bar3', BarCircular::class)->setPublic(true)
36 ->addMethodCall('addFoobar', array(new Reference('foobar3'), new Reference('foobar3')));
38 $container->register('foobar3', FoobarCircular::class)->setPublic($public);
40 // loop with non-shared dep
42 $container->register('foo4', 'stdClass')->setPublic($public)
44 ->setProperty('foobar', new Reference('foobar4'));
46 $container->register('foobar4', 'stdClass')->setPublic(true)
47 ->addArgument(new Reference('foo4'));
49 // loop on the constructor of a setter-injected dep with property
51 $container->register('foo5', 'stdClass')->setPublic(true)
52 ->setProperty('bar', new Reference('bar5'));
54 $container->register('bar5', 'stdClass')->setPublic($public)
55 ->addArgument(new Reference('foo5'))
56 ->setProperty('foo', new Reference('foo5'));
58 // doctrine-like event system + some extra
60 $container->register('manager', 'stdClass')->setPublic(true)
61 ->addArgument(new Reference('connection'));
63 $container->register('logger', 'stdClass')->setPublic(true)
64 ->addArgument(new Reference('connection'))
65 ->setProperty('handler', (new Definition('stdClass'))->addArgument(new Reference('manager')))
67 $container->register('connection', 'stdClass')->setPublic(true)
68 ->addArgument(new Reference('dispatcher'))
69 ->addArgument(new Reference('config'));
71 $container->register('config', 'stdClass')->setPublic(false)
72 ->setProperty('logger', new Reference('logger'));
74 $container->register('dispatcher', 'stdClass')->setPublic($public)
76 ->setProperty('subscriber', new Reference('subscriber'));
78 $container->register('subscriber', 'stdClass')->setPublic(true)
79 ->addArgument(new Reference('manager'));
81 // doctrine-like event system + some extra (bis)
83 $container->register('manager2', 'stdClass')->setPublic(true)
84 ->addArgument(new Reference('connection2'));
86 $container->register('logger2', 'stdClass')->setPublic(false)
87 ->addArgument(new Reference('connection2'))
88 ->setProperty('handler2', (new Definition('stdClass'))->addArgument(new Reference('manager2')))
90 $container->register('connection2', 'stdClass')->setPublic(true)
91 ->addArgument(new Reference('dispatcher2'))
92 ->addArgument(new Reference('config2'));
94 $container->register('config2', 'stdClass')->setPublic(false)
95 ->setProperty('logger2', new Reference('logger2'));
97 $container->register('dispatcher2', 'stdClass')->setPublic($public)
99 ->setProperty('subscriber2', new Reference('subscriber2'));
101 $container->register('subscriber2', 'stdClass')->setPublic(false)
102 ->addArgument(new Reference('manager2'));
104 // private service involved in a loop
106 $container->register('foo6', 'stdClass')
108 ->setProperty('bar6', new Reference('bar6'));
110 $container->register('bar6', 'stdClass')
112 ->addArgument(new Reference('foo6'));
114 $container->register('baz6', 'stdClass')
116 ->setProperty('bar6', new Reference('bar6'));