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:
commit
dd73a100c3
@ -65,7 +65,7 @@ class DumpNode extends \Twig_Node
|
|||||||
->write('\Symfony\Component\VarDumper\VarDumper::dump(array('."\n")
|
->write('\Symfony\Component\VarDumper\VarDumper::dump(array('."\n")
|
||||||
->indent();
|
->indent();
|
||||||
foreach ($values as $node) {
|
foreach ($values as $node) {
|
||||||
$compiler->addIndentation();
|
$compiler->write('');
|
||||||
if ($node->hasAttribute('name')) {
|
if ($node->hasAttribute('name')) {
|
||||||
$compiler
|
$compiler
|
||||||
->string($node->getAttribute('name'))
|
->string($node->getAttribute('name'))
|
||||||
|
@ -52,10 +52,12 @@ class DecoratorServicePass implements CompilerPassInterface
|
|||||||
$container->setAlias($renamedId, new Alias((string) $alias, false));
|
$container->setAlias($renamedId, new Alias((string) $alias, false));
|
||||||
} else {
|
} else {
|
||||||
$decoratedDefinition = $container->getDefinition($inner);
|
$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();
|
$public = $decoratedDefinition->isPublic();
|
||||||
$decoratedDefinition->setPublic(false);
|
$decoratedDefinition->setPublic(false);
|
||||||
$decoratedDefinition->setTags(array());
|
$decoratedDefinition->setTags(array());
|
||||||
|
$decoratedDefinition->setAutowiringTypes(array());
|
||||||
$container->setDefinition($renamedId, $decoratedDefinition);
|
$container->setDefinition($renamedId, $decoratedDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,17 +129,39 @@ class DecoratorServicePassTest extends \PHPUnit_Framework_TestCase
|
|||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
$container
|
$container
|
||||||
->register('foo')
|
->register('foo')
|
||||||
->setTags(array('name' => 'bar'))
|
->setTags(array('bar' => array('attr' => 'baz')))
|
||||||
;
|
;
|
||||||
$container
|
$container
|
||||||
->register('baz')
|
->register('baz')
|
||||||
|
->setTags(array('foobar' => array('attr' => 'bar')))
|
||||||
->setDecoratedService('foo')
|
->setDecoratedService('foo')
|
||||||
;
|
;
|
||||||
|
|
||||||
$this->process($container);
|
$this->process($container);
|
||||||
|
|
||||||
$this->assertEmpty($container->getDefinition('baz.inner')->getTags());
|
$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)
|
protected function process(ContainerBuilder $container)
|
||||||
|
@ -337,8 +337,11 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$this->process($container);
|
$this->process($container);
|
||||||
|
|
||||||
$def = $container->getDefinition('child');
|
$childDef = $container->getDefinition('child');
|
||||||
$this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes());
|
$this->assertEquals(array('Foo', 'Bar'), $childDef->getAutowiringTypes());
|
||||||
|
|
||||||
|
$parentDef = $container->getDefinition('parent');
|
||||||
|
$this->assertSame(array('Foo'), $parentDef->getAutowiringTypes());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testProcessResolvesAliases()
|
public function testProcessResolvesAliases()
|
||||||
|
@ -28,6 +28,7 @@ class StreamedResponse extends Response
|
|||||||
{
|
{
|
||||||
protected $callback;
|
protected $callback;
|
||||||
protected $streamed;
|
protected $streamed;
|
||||||
|
private $headersSent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
@ -44,6 +45,7 @@ class StreamedResponse extends Response
|
|||||||
$this->setCallback($callback);
|
$this->setCallback($callback);
|
||||||
}
|
}
|
||||||
$this->streamed = false;
|
$this->streamed = false;
|
||||||
|
$this->headersSent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,6 +72,22 @@ class StreamedResponse extends Response
|
|||||||
$this->callback = $callback;
|
$this->callback = $callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* This method only sends the headers once.
|
||||||
|
*/
|
||||||
|
public function sendHeaders()
|
||||||
|
{
|
||||||
|
if ($this->headersSent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->headersSent = true;
|
||||||
|
|
||||||
|
parent::sendHeaders();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user