container_almost_circular.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. use Symfony\Component\DependencyInjection\ContainerBuilder;
  3. use Symfony\Component\DependencyInjection\Definition;
  4. use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
  5. use Symfony\Component\DependencyInjection\Reference;
  6. $public = 'public' === $visibility;
  7. $container = new ContainerBuilder();
  8. // same visibility for deps
  9. $container->register('foo', FooCircular::class)->setPublic(true)
  10. ->addArgument(new Reference('bar'));
  11. $container->register('bar', BarCircular::class)->setPublic($public)
  12. ->addMethodCall('addFoobar', array(new Reference('foobar')));
  13. $container->register('foobar', FoobarCircular::class)->setPublic($public)
  14. ->addArgument(new Reference('foo'));
  15. // mixed visibility for deps
  16. $container->register('foo2', FooCircular::class)->setPublic(true)
  17. ->addArgument(new Reference('bar2'));
  18. $container->register('bar2', BarCircular::class)->setPublic(!$public)
  19. ->addMethodCall('addFoobar', array(new Reference('foobar2')));
  20. $container->register('foobar2', FoobarCircular::class)->setPublic($public)
  21. ->addArgument(new Reference('foo2'));
  22. // simple inline setter with internal reference
  23. $container->register('bar3', BarCircular::class)->setPublic(true)
  24. ->addMethodCall('addFoobar', array(new Reference('foobar3'), new Reference('foobar3')));
  25. $container->register('foobar3', FoobarCircular::class)->setPublic($public);
  26. // loop with non-shared dep
  27. $container->register('foo4', 'stdClass')->setPublic($public)
  28. ->setShared(false)
  29. ->setProperty('foobar', new Reference('foobar4'));
  30. $container->register('foobar4', 'stdClass')->setPublic(true)
  31. ->addArgument(new Reference('foo4'));
  32. // loop on the constructor of a setter-injected dep with property
  33. $container->register('foo5', 'stdClass')->setPublic(true)
  34. ->setProperty('bar', new Reference('bar5'));
  35. $container->register('bar5', 'stdClass')->setPublic($public)
  36. ->addArgument(new Reference('foo5'))
  37. ->setProperty('foo', new Reference('foo5'));
  38. return $container;