Merge branch '2.8' into 3.1

* 2.8:
  Fix edge case with StreamedResponse where headers are sent twice
  removed usage of Twig_Compiler::addIndentation
  A decorated service should not keep the autowiring types
  merge tags instead of completely replacing them
This commit is contained in:
Fabien Potencier 2016-10-24 08:52:44 -07:00
commit dd73a100c3
5 changed files with 51 additions and 6 deletions

View File

@ -65,7 +65,7 @@ class DumpNode extends \Twig_Node
->write('\Symfony\Component\VarDumper\VarDumper::dump(array('."\n")
->indent();
foreach ($values as $node) {
$compiler->addIndentation();
$compiler->write('');
if ($node->hasAttribute('name')) {
$compiler
->string($node->getAttribute('name'))

View File

@ -52,10 +52,12 @@ class DecoratorServicePass implements CompilerPassInterface
$container->setAlias($renamedId, new Alias((string) $alias, false));
} else {
$decoratedDefinition = $container->getDefinition($inner);
$definition->setTags($decoratedDefinition->getTags(), $definition->getTags());
$definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
$definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes()));
$public = $decoratedDefinition->isPublic();
$decoratedDefinition->setPublic(false);
$decoratedDefinition->setTags(array());
$decoratedDefinition->setAutowiringTypes(array());
$container->setDefinition($renamedId, $decoratedDefinition);
}

View File

@ -129,17 +129,39 @@ class DecoratorServicePassTest extends \PHPUnit_Framework_TestCase
$container = new ContainerBuilder();
$container
->register('foo')
->setTags(array('name' => 'bar'))
->setTags(array('bar' => array('attr' => 'baz')))
;
$container
->register('baz')
->setTags(array('foobar' => array('attr' => 'bar')))
->setDecoratedService('foo')
;
$this->process($container);
$this->assertEmpty($container->getDefinition('baz.inner')->getTags());
$this->assertEquals(array('name' => 'bar'), $container->getDefinition('baz')->getTags());
$this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags());
}
public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition()
{
$container = new ContainerBuilder();
$container
->register('parent')
->addAutowiringType('Bar')
;
$container
->register('child')
->setDecoratedService('parent')
->addAutowiringType('Foo')
;
$this->process($container);
$this->assertEquals(array('Bar', 'Foo'), $container->getDefinition('child')->getAutowiringTypes());
$this->assertEmpty($container->getDefinition('child.inner')->getAutowiringTypes());
}
protected function process(ContainerBuilder $container)

View File

@ -337,8 +337,11 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase
$this->process($container);
$def = $container->getDefinition('child');
$this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes());
$childDef = $container->getDefinition('child');
$this->assertEquals(array('Foo', 'Bar'), $childDef->getAutowiringTypes());
$parentDef = $container->getDefinition('parent');
$this->assertSame(array('Foo'), $parentDef->getAutowiringTypes());
}
public function testProcessResolvesAliases()

View File

@ -28,6 +28,7 @@ class StreamedResponse extends Response
{
protected $callback;
protected $streamed;
private $headersSent;
/**
* Constructor.
@ -44,6 +45,7 @@ class StreamedResponse extends Response
$this->setCallback($callback);
}
$this->streamed = false;
$this->headersSent = false;
}
/**
@ -70,6 +72,22 @@ class StreamedResponse extends Response
$this->callback = $callback;
}
/**
* {@inheritdoc}
*
* This method only sends the headers once.
*/
public function sendHeaders()
{
if ($this->headersSent) {
return;
}
$this->headersSent = true;
parent::sendHeaders();
}
/**
* {@inheritdoc}
*