8000 [DI] Revert "deprecate get() for uncompiled container builders" by nicolas-grekas · Pull Request #20533 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[DI] Revert "deprecate get() for uncompiled container builders" #20533

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 16, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions UPGRADE-4.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ Debug
DependencyInjection
-------------------

* Calling `get()` on a `ContainerBuilder` instance before compiling the
container is not supported anymore and will throw an exception.

* Using unsupported configuration keys in YAML configuration files raises an
exception.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
*/
private $envCounters = array();

private $compiled = false;

/**
* Sets the track resources flag.
*
Expand Down Expand Up @@ -419,10 +417,6 @@ public function has($id)
*/
public function get($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE)
{
if (!$this->compiled) {
@trigger_error(sprintf('Calling %s() before compiling the container is deprecated since version 3.2 and will throw an exception in 4.0.', __METHOD__), E_USER_DEPRECATED);
}

$id = strtolower($id);

if ($service = parent::get($id, ContainerInterface::NULL_ON_INVALID_REFERENCE)) {
Expand Down Expand Up @@ -569,7 +563,6 @@ public function compile()
}

$compiler->compile($this);
$this->compiled = true;

foreach ($this->definitions as $id => $definition) {
if (!$definition->isPublic()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,7 @@ private function findNodes()
}

if (!$container->hasDefinition($id)) {
if ('service_container' === $id) {
$class = get_class($this->container);
} else {
$class = get_class($container->get($id));
}

$class = get_class('service_container' === $id ? $this->container : $container->get($id));
$nodes[$id] = array('class' => str_replace('\\', '\\\\', $class), 'attributes' => $this->options['node.instance']);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ public function testCreateDeprecatedService()

$builder = new ContainerBuilder();
$builder->setDefinition('deprecated_foo', $definition);
$builder->compile();
$builder->get('deprecated_foo');
}

Expand Down Expand Up @@ -98,14 +97,12 @@ public function testHas()
public function testGetThrowsExceptionIfServiceDoesNotExist()
{
$builder = new ContainerBuilder();
$builder->compile();
$builder->get('foo');
}

public function testGetReturnsNullIfServiceDoesNotExistAndInvalidReferenceIsUsed()
{
$builder = new ContainerBuilder();
$builder->compile();

$this->assertNull($builder->get('foo', ContainerInterface::NULL_ON_INVALID_REFERENCE), '->get() returns null if the service does not exist and NULL_ON_INVALID_REFERENCE is passed as a second argument');
}
Expand All @@ -117,15 +114,13 @@ public function testGetThrowsCircularReferenceExceptionIfServiceHasReferenceToIt
{
$builder = new ContainerBuilder();
$builder->register('baz', 'stdClass')->setArguments(array(new Reference('baz')));
$builder->compile();
$builder->get('baz');
}

public function testGetReturnsSameInstanceWhenServiceIsShared()
{
$builder = new ContainerBuilder();
$builder->register('bar', 'stdClass');
$builder->compile();

$this->assertTrue($builder->get('bar') === $builder->get('bar'), '->get() always returns the same instance if the service is shared');
}
Expand All @@ -134,7 +129,6 @@ public function testGetCreatesServiceBasedOnDefinition()
{
$builder = new ContainerBuilder();
$builder->register('foo', 'stdClass');
$builder->compile();

$this->assertInternalType('object', $builder->get('foo'), '->get() returns the service definition associated with the id');
}
Expand All @@ -143,7 +137,6 @@ public function testGetReturnsRegisteredService()
{
$builder = new ContainerBuilder();
$builder->set('bar', $bar = new \stdClass());
$builder->compile();

$this->assertSame($bar, $builder->get('bar'), '->get() returns the service associated with the id');
}
Expand All @@ -153,7 +146,6 @@ public function testRegisterDoesNotOverrideExistingService()
$builder = new ContainerBuilder();
$builder->set('bar', $bar = new \stdClass());
$builder->register('bar', 'stdClass');
$builder->compile();

$this->assertSame($bar, $builder->get('bar'), '->get() returns the service associated with the id even if a definition has been defined');
}
Expand All @@ -163,8 +155,6 @@ public function testNonSharedServicesReturnsDifferentInstances()
$builder = new ContainerBuilder();
$builder->register('bar', 'stdClass')->setShared(false);

$builder->compile();

$this->assertNotSame($builder->get('bar'), $builder->get('bar'));
}

Expand All @@ -177,8 +167,6 @@ public function testGetUnsetLoadingServiceWhenCreateServiceThrowsAnException()
$builder = new ContainerBuilder();
$builder->register('foo', 'stdClass')->setSynthetic(true);

$builder->compile();

// we expect a RuntimeException here as foo is synthetic
try {
$builder->get('foo');
Expand Down Expand Up @@ -207,9 +195,6 @@ public function testAliases()
$this->assertFalse($builder->hasAlias('foobar'), '->hasAlias() returns false if the alias does not exist');
$this->assertEquals('foo', (string) $builder->getAlias('bar'), '->getAlias() returns the aliased service');
$this->assertTrue($builder->has('bar'), '->setAlias() defines a new service');

$builder->compile();

$this->assertTrue($builder->get('bar') === $builder->get('foo'), '->setAlias() creates a service that is an alias to another one');

try {
Expand Down Expand Up @@ -277,9 +262,6 @@ public function testSetReplacesAlias()
$builder->set('aliased', new \stdClass());

$builder->set('alias', $foo = new \stdClass());

$builder->compile();

$this->assertSame($foo, $builder->get('alias'), '->set() replaces an existing alias');
}

Expand All @@ -303,9 +285,6 @@ public function testCreateService()
$builder->register('foo1', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
$builder->register('foo2', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/%file%.php');
$builder->setParameter('file', 'foo');

$builder->compile();

$this->assertInstanceOf('\Bar\FooClass', $builder->get('foo1'), '->createService() requires the file defined by the service definition');
$this->assertInstanceOf('\Bar\FooClass', $builder->get('foo2'), '->createService() replaces parameters in the file provided by the service definition');
}
Expand All @@ -317,8 +296,6 @@ public function testCreateProxyWithRealServiceInstantiator()
$builder->register('foo1', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
$builder->getDefinition('foo1')->setLazy(true);

$builder->compile();

$foo1 = $builder->get('foo1');

$this->assertSame($foo1, $builder->get('foo1'), 'The same proxy is retrieved on multiple subsequent calls');
Expand All @@ -330,9 +307,6 @@ public function testCreateServiceClass()
$builder = new ContainerBuilder();
$builder->register('foo1', '%class%');
$builder->setParameter('class', 'stdClass');

$builder->compile();

$this->assertInstanceOf('\stdClass', $builder->get('foo1'), '->createService() replaces parameters in the class provided by the service definition');
}

Expand All @@ -342,9 +316,6 @@ public function testCreateServiceArguments()
$builder->register('bar', 'stdClass');
$builder->register('foo1', 'Bar\FooClass')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar'), '%%unescape_it%%'));
$builder->setParameter('value', 'bar');

$builder->compile();

$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', $builder->get('bar'), '%unescape_it%'), $builder->get('foo1')->arguments, '->createService() replaces parameters and service references in the arguments provided by the service definition');
}

Expand All @@ -356,8 +327,6 @@ public function testCreateServiceFactory()
$builder->register('bar', 'Bar\FooClass')->setFactory(array(new Definition('Bar\FooClass'), 'getInstance'));
$builder->register('baz', 'Bar\FooClass')->setFactory(array(new Reference('bar'), 'getInstance'));

$builder->compile();

$this->assertTrue($builder->get('foo')->called, '->createService() calls the factory method to create the service instance');
$this->assertTrue($builder->get('qux')->called, '->createService() calls the factory method to create the service instance');
$this->assertTrue($builder->get('bar')->called, '->createService() uses anonymous service as factory');
Expand All @@ -370,9 +339,6 @@ public function testCreateServiceMethodCalls()
$builder->register('bar', 'stdClass');
$builder->register('foo1', 'Bar\FooClass')->addMethodCall('setBar', array(array('%value%', new Reference('bar'))));
$builder->setParameter('value', 'bar');

$builder->compile();

$this->assertEquals(array('bar', $builder->get('bar')), $builder->get('foo1')->bar, '->createService() replaces the values in the method calls arguments');
}

Expand All @@ -382,9 +348,6 @@ public function testCreateServiceMethodCallsWithEscapedParam()
$builder->register('bar', 'stdClass');
$builder->register('foo1', 'Bar\FooClass')->addMethodCall('setBar', array(array('%%unescape_it%%')));
$builder->setParameter('value', 'bar');

$builder->compile();

$this->assertEquals(array('%unescape_it%'), $builder->get('foo1')->bar, '->createService() replaces the values in the method calls arguments');
}

Expand All @@ -394,9 +357,6 @@ public function testCreateServiceProperties()
$builder->register('bar', 'stdClass');
$builder->register('foo1', 'Bar\FooClass')->setProperty('bar', array('%value%', new Reference('bar'), '%%unescape_it%%'));
$builder->setParameter('value', 'bar');

$builder->compile();

$this->assertEquals(array('bar', $builder->get('bar'), '%unescape_it%'), $builder->get('foo1')->bar, '->createService() replaces the values in the properties');
}

Expand All @@ -411,8 +371,6 @@ public function testCreateServiceConfigurator()
$builder->register('foo4', 'Bar\FooClass')->setConfigurator(array($builder->getDefinition('baz'), 'configure'));
$builder->register('foo5', 'Bar\FooClass')->setConfigurator('foo');

$builder->compile();

$this->assertTrue($builder->get('foo1')->configured, '->createService() calls the configurator');
$this->assertTrue($builder->get('foo2')->configured, '->createService() calls the configurator');
$this->assertTrue($builder->get('foo3')->configured, '->createService() calls the configurator');
Expand All @@ -433,9 +391,6 @@ public function testCreateSyntheticService()
{
$builder = new ContainerBuilder();
$builder->register('foo', 'Bar\FooClass')->setSynthetic(true);

$builder->compile();

$builder->get('foo');
}

Expand All @@ -445,18 +400,13 @@ public function testCreateServiceWithExpression()
$builder->setParameter('bar', 'bar');
$builder->register('bar', 'BarClass');
$builder->register('foo', 'Bar\FooClass')->addArgument(array('foo' => new Expression('service("bar").foo ~ parameter("bar")')));

$builder->compile();

$this->assertEquals('foobar', $builder->get('foo')->arguments['foo']);
}

public function testResolveServices()
{
$builder = new ContainerBuilder();
$builder->register('foo', 'Bar\FooClass');
$builder->compile();

$this->assertEquals($builder->get('foo'), $builder->resolveServices(new Reference('foo')), '->resolveServices() resolves service references to service instances');
$this->assertEquals(array('foo' => array('foo', $builder->get('foo'))), $builder->resolveServices(array('foo' => array('foo', new Reference('foo')))), '->resolveServices() resolves service references to service instances in nested arrays');
$this->assertEquals($builder->get('foo'), $builder->resolveServices(new Expression('service("foo")')), '->resolveServices() resolves expressions');
Expand Down
0