Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit dd73a10

Browse files
committed
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
2 parents d1e0ba9 + 2011f44 commit dd73a10

File tree

5 files changed

+51
-6
lines changed

5 files changed

+51
-6
lines changed

src/Symfony/Bridge/Twig/Node/DumpNode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function compile(\Twig_Compiler $compiler)
6565
->write('\Symfony\Component\VarDumper\VarDumper::dump(array('."\n")
6666
->indent();
6767
foreach ($values as $node) {
68-
$compiler->addIndentation();
68+
$compiler->write('');
6969
if ($node->hasAttribute('name')) {
7070
$compiler
7171
->string($node->getAttribute('name'))

src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,12 @@ public function process(ContainerBuilder $container)
5252
$container->setAlias($renamedId, new Alias((string) $alias, false));
5353
} else {
5454
$decoratedDefinition = $container->getDefinition($inner);
55-
$definition->setTags($decoratedDefinition->getTags(), $definition->getTags());
55+
$definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
56+
$definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes()));
5657
$public = $decoratedDefinition->isPublic();
5758
$decoratedDefinition->setPublic(false);
5859
$decoratedDefinition->setTags(array());
60+
$decoratedDefinition->setAutowiringTypes(array());
5961
$container->setDefinition($renamedId, $decoratedDefinition);
6062
}
6163

src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,39 @@ public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinitio
129129
$container = new ContainerBuilder();
130130
$container
131131
->register('foo')
132-
->setTags(array('name' => 'bar'))
132+
->setTags(array('bar' => array('attr' => 'baz')))
133133
;
134134
$container
135135
->register('baz')
136+
->setTags(array('foobar' => array('attr' => 'bar')))
136137
->setDecoratedService('foo')
137138
;
138139

139140
$this->process($container);
140141

141142
$this->assertEmpty($container->getDefinition('baz.inner')->getTags());
142-
$this->assertEquals(array('name' => 'bar'), $container->getDefinition('baz')->getTags());
143+
$this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags());
144+
}
145+
146+
public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition()
147+
{
148+
$container = new ContainerBuilder();
149+
150+
$container
151+
->register('parent')
152+
->addAutowiringType('Bar')
153+
;
154+
155+
$container
156+
->register('child')
157+
->setDecoratedService('parent')
158+
->addAutowiringType('Foo')
159+
;
160+
161+
$this->process($container);
162+
163+
$this->assertEquals(array('Bar', 'Foo'), $container->getDefinition('child')->getAutowiringTypes());
164+
$this->assertEmpty($container->getDefinition('child.inner')->getAutowiringTypes());
143165
}
144166

145167
protected function process(ContainerBuilder $container)

src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,11 @@ public function testProcessMergeAutowiringTypes()
337337

338338
$this->process($container);
339339

340-
$def = $container->getDefinition('child');
341-
$this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes());
340+
$childDef = $container->getDefinition('child');
341+
$this->assertEquals(array('Foo', 'Bar'), $childDef->getAutowiringTypes());
342+
343+
$parentDef = $container->getDefinition('parent');
344+
$this->assertSame(array('Foo'), $parentDef->getAutowiringTypes());
342345
}
343346

344347
public function testProcessResolvesAliases()

src/Symfony/Component/HttpFoundation/StreamedResponse.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class StreamedResponse extends Response
2828
{
2929
protected $callback;
3030
protected $streamed;
31+
private $headersSent;
3132

3233
/**
3334
* Constructor.
@@ -44,6 +45,7 @@ public function __construct(callable $callback = null, $status = 200, $headers =
4445
$this->setCallback($callback);
4546
}
4647
$this->streamed = false;
48+
$this->headersSent = false;
4749
}
4850

4951
/**
@@ -70,6 +72,22 @@ public function setCallback(callable $callback)
7072
$this->callback = $callback;
7173
}
7274

75+
/**
76+
* {@inheritdoc}
77+
*
78+
* This method only sends the headers once.
79+
*/
80+
public function sendHeaders()
81+
{
82+
if ($this->headersSent) {
83+
return;
84+
}
85+
86+
$this->headersSent = true;
87+
88+
parent::sendHeaders();
89+
}
90+
7391
/**
7492
* {@inheritdoc}
7593
*

0 commit comments

Comments
 (0)