Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc0e4c4a

Browse files
committed
bug#9816 [DependencyInjection]fixes#9815 Syntax error in PHP dumper (realityking)
This PR was merged into the 2.5-dev branch.Discussion----------[DependencyInjection]fixes#9815 Syntax error in PHP dumper| Q | A| ------------- | ---| Bug fix? | yes| New feature? | no| BC breaks? | no| Deprecations? | no| Tests pass? | yes| Fixed tickets |#9815| License | MIT| Doc PR | -I also updated the unit tests to test a namespaces class to prevent future issues like this one.Commits-------e00b0f3 [DependencyInjection]fixes#9815 Syntax error in PHP dumper
2 parentsbaaf9b6 +e00b0f3 commitc0e4c4a

File tree

9 files changed

+75
-61
lines changed

9 files changed

+75
-61
lines changed

‎src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ private function addServiceConfigurator($id, $definition, $variableName = 'insta
490490
$class =$this->dumpValue($callable[0]);
491491
// If the class is a string we can optimize call_user_func away
492492
if (strpos($class,"'") ===0) {
493-
returnsprintf("\%s::%s(\$%s);\n",substr($class,1, -1),$callable[1],$variableName);
493+
returnsprintf(" %s::%s(\$%s);\n",$this->dumpLiteralClass($class),$callable[1],$variableName);
494494
}
495495

496496
returnsprintf(" call_user_func(array(%s, '%s'),\$%s);\n",$this->dumpValue($callable[0]),$callable[1],$variableName);
@@ -701,7 +701,7 @@ private function addNewInstance($id, Definition $definition, $return, $instantia
701701

702702
// If the class is a string we can optimize call_user_func away
703703
if (strpos($class,"'") ===0) {
704-
returnsprintf("$return{$instantiation}\%s::%s(%s);\n",substr($class,1, -1),$definition->getFactoryMethod(),$arguments ?implode(',',$arguments) :'');
704+
returnsprintf("$return{$instantiation}%s::%s(%s);\n",$this->dumpLiteralClass($class),$definition->getFactoryMethod(),$arguments ?implode(',',$arguments) :'');
705705
}
706706

707707
returnsprintf("$return{$instantiation}call_user_func(array(%s, '%s')%s);\n",$this->dumpValue($definition->getFactoryClass()),$definition->getFactoryMethod(),$arguments ?','.implode(',',$arguments) :'');
@@ -718,7 +718,7 @@ private function addNewInstance($id, Definition $definition, $return, $instantia
718718
returnsprintf("\$class = %s;\n\n$return{$instantiation}new\$class(%s);\n",$class,implode(',',$arguments));
719719
}
720720

721-
returnsprintf("$return{$instantiation}new\\%s(%s);\n",substr(str_replace('\\\\','\\',$class),1, -1),implode(',',$arguments));
721+
returnsprintf("$return{$instantiation}new %s(%s);\n",$this->dumpLiteralClass($class),implode(',',$arguments));
722722
}
723723

724724
/**
@@ -1248,6 +1248,18 @@ private function dumpValue($value, $interpolate = true)
12481248
}
12491249
}
12501250

1251+
/**
1252+
* Dumps a string to a literal (aka PHP Code) class value.
1253+
*
1254+
* @param string $class
1255+
*
1256+
* @return string
1257+
*/
1258+
privatefunctiondumpLiteralClass($class)
1259+
{
1260+
return'\\'.substr(str_replace('\\\\','\\',$class),1, -1);
1261+
}
1262+
12511263
/**
12521264
* Dumps a parameter
12531265
*

‎src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php‎

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function testDefinitions()
4040
{
4141
$builder =newContainerBuilder();
4242
$definitions =array(
43-
'foo' =>newDefinition('FooClass'),
43+
'foo' =>newDefinition('Bar\FooClass'),
4444
'bar' =>newDefinition('BarClass'),
4545
);
4646
$builder->setDefinitions($definitions);
@@ -69,7 +69,7 @@ public function testDefinitions()
6969
publicfunctiontestRegister()
7070
{
7171
$builder =newContainerBuilder();
72-
$builder->register('foo','FooClass');
72+
$builder->register('foo','Bar\FooClass');
7373
$this->assertTrue($builder->hasDefinition('foo'),'->register() registers a new service definition');
7474
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition',$builder->getDefinition('foo'),'->register() returns the newly created Definition instance');
7575
}
@@ -81,7 +81,7 @@ public function testHas()
8181
{
8282
$builder =newContainerBuilder();
8383
$this->assertFalse($builder->has('foo'),'->has() returns false if the service does not exist');
84-
$builder->register('foo','FooClass');
84+
$builder->register('foo','Bar\FooClass');
8585
$this->assertTrue($builder->has('foo'),'->has() returns true if a service definition exists');
8686
$builder->set('bar',new \stdClass());
8787
$this->assertTrue($builder->has('bar'),'->has() returns true if a service exists');
@@ -259,11 +259,11 @@ public function testAddGetCompilerPass()
259259
publicfunctiontestCreateService()
260260
{
261261
$builder =newContainerBuilder();
262-
$builder->register('foo1','FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
263-
$this->assertInstanceOf('\FooClass',$builder->get('foo1'),'->createService() requires the file defined by the service definition');
264-
$builder->register('foo2','FooClass')->setFile(__DIR__.'/Fixtures/includes/%file%.php');
262+
$builder->register('foo1','Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
263+
$this->assertInstanceOf('\Bar\FooClass',$builder->get('foo1'),'->createService() requires the file defined by the service definition');
264+
$builder->register('foo2','Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/%file%.php');
265265
$builder->setParameter('file','foo');
266-
$this->assertInstanceOf('\FooClass',$builder->get('foo2'),'->createService() replaces parameters in the file provided by the service definition');
266+
$this->assertInstanceOf('\Bar\FooClass',$builder->get('foo2'),'->createService() replaces parameters in the file provided by the service definition');
267267
}
268268

269269
/**
@@ -273,13 +273,13 @@ public function testCreateProxyWithRealServiceInstantiator()
273273
{
274274
$builder =newContainerBuilder();
275275

276-
$builder->register('foo1','FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
276+
$builder->register('foo1','Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
277277
$builder->getDefinition('foo1')->setLazy(true);
278278

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

281281
$this->assertSame($foo1,$builder->get('foo1'),'The same proxy is retrieved on multiple subsequent calls');
282-
$this->assertSame('FooClass',get_class($foo1));
282+
$this->assertSame('Bar\FooClass',get_class($foo1));
283283
}
284284

285285
/**
@@ -300,7 +300,7 @@ public function testCreateServiceArguments()
300300
{
301301
$builder =newContainerBuilder();
302302
$builder->register('bar','stdClass');
303-
$builder->register('foo1','FooClass')->addArgument(array('foo' =>'%value%','%value%' =>'foo',newReference('bar'),'%%unescape_it%%'));
303+
$builder->register('foo1','Bar\FooClass')->addArgument(array('foo' =>'%value%','%value%' =>'foo',newReference('bar'),'%%unescape_it%%'));
304304
$builder->setParameter('value','bar');
305305
$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');
306306
}
@@ -312,7 +312,7 @@ public function testCreateServiceFactoryMethod()
312312
{
313313
$builder =newContainerBuilder();
314314
$builder->register('bar','stdClass');
315-
$builder->register('foo1','FooClass')->setFactoryClass('FooClass')->setFactoryMethod('getInstance')->addArgument(array('foo' =>'%value%','%value%' =>'foo',newReference('bar')));
315+
$builder->register('foo1','Bar\FooClass')->setFactoryClass('Bar\FooClass')->setFactoryMethod('getInstance')->addArgument(array('foo' =>'%value%','%value%' =>'foo',newReference('bar')));
316316
$builder->setParameter('value','bar');
317317
$this->assertTrue($builder->get('foo1')->called,'->createService() calls the factory method to create the service instance');
318318
$this->assertEquals(array('foo' =>'bar','bar' =>'foo',$builder->get('bar')),$builder->get('foo1')->arguments,'->createService() passes the arguments to the factory method');
@@ -337,7 +337,7 @@ public function testCreateServiceMethodCalls()
337337
{
338338
$builder =newContainerBuilder();
339339
$builder->register('bar','stdClass');
340-
$builder->register('foo1','FooClass')->addMethodCall('setBar',array(array('%value%',newReference('bar'))));
340+
$builder->register('foo1','Bar\FooClass')->addMethodCall('setBar',array(array('%value%',newReference('bar'))));
341341
$builder->setParameter('value','bar');
342342
$this->assertEquals(array('bar',$builder->get('bar')),$builder->get('foo1')->bar,'->createService() replaces the values in the method calls arguments');
343343
}
@@ -348,23 +348,23 @@ public function testCreateServiceMethodCalls()
348348
publicfunctiontestCreateServiceConfigurator()
349349
{
350350
$builder =newContainerBuilder();
351-
$builder->register('foo1','FooClass')->setConfigurator('sc_configure');
351+
$builder->register('foo1','Bar\FooClass')->setConfigurator('sc_configure');
352352
$this->assertTrue($builder->get('foo1')->configured,'->createService() calls the configurator');
353353

354-
$builder->register('foo2','FooClass')->setConfigurator(array('%class%','configureStatic'));
354+
$builder->register('foo2','Bar\FooClass')->setConfigurator(array('%class%','configureStatic'));
355355
$builder->setParameter('class','BazClass');
356356
$this->assertTrue($builder->get('foo2')->configured,'->createService() calls the configurator');
357357

358358
$builder->register('baz','BazClass');
359-
$builder->register('foo3','FooClass')->setConfigurator(array(newReference('baz'),'configure'));
359+
$builder->register('foo3','Bar\FooClass')->setConfigurator(array(newReference('baz'),'configure'));
360360
$this->assertTrue($builder->get('foo3')->configured,'->createService() calls the configurator');
361361

362-
$builder->register('foo4','FooClass')->setConfigurator('foo');
362+
$builder->register('foo4','Bar\FooClass')->setConfigurator('foo');
363363
try {
364364
$builder->get('foo4');
365365
$this->fail('->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
366366
}catch (\InvalidArgumentException$e) {
367-
$this->assertEquals('The configure callable for class "FooClass" is not a callable.',$e->getMessage(),'->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
367+
$this->assertEquals('The configure callable for class "Bar\FooClass" is not a callable.',$e->getMessage(),'->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
368368
}
369369
}
370370

@@ -375,7 +375,7 @@ public function testCreateServiceConfigurator()
375375
publicfunctiontestCreateSyntheticService()
376376
{
377377
$builder =newContainerBuilder();
378-
$builder->register('foo','FooClass')->setSynthetic(true);
378+
$builder->register('foo','Bar\FooClass')->setSynthetic(true);
379379
$builder->get('foo');
380380
}
381381

@@ -384,7 +384,7 @@ public function testCreateServiceWithExpression()
384384
$builder =newContainerBuilder();
385385
$builder->setParameter('bar','bar');
386386
$builder->register('bar','BarClass');
387-
$builder->register('foo','FooClass')->addArgument(array('foo' =>newExpression('service("bar").foo ~ parameter("bar")')));
387+
$builder->register('foo','Bar\FooClass')->addArgument(array('foo' =>newExpression('service("bar").foo ~ parameter("bar")')));
388388
$this->assertEquals('foobar',$builder->get('foo')->arguments['foo']);
389389
}
390390

@@ -394,7 +394,7 @@ public function testCreateServiceWithExpression()
394394
publicfunctiontestResolveServices()
395395
{
396396
$builder =newContainerBuilder();
397-
$builder->register('foo','FooClass');
397+
$builder->register('foo','Bar\FooClass');
398398
$this->assertEquals($builder->get('foo'),$builder->resolveServices(newReference('foo')),'->resolveServices() resolves service references to service instances');
399399
$this->assertEquals(array('foo' =>array('foo',$builder->get('foo'))),$builder->resolveServices(array('foo' =>array('foo',newReference('foo')))),'->resolveServices() resolves service references to service instances in nested arrays');
400400
$this->assertEquals($builder->get('foo'),$builder->resolveServices(newExpression('service("foo")')),'->resolveServices() resolves expressions');
@@ -427,7 +427,7 @@ public function testMerge()
427427

428428
$container =newContainerBuilder();
429429
$container->setResourceTracking(false);
430-
$container->register('foo','FooClass');
430+
$container->register('foo','Bar\FooClass');
431431
$container->register('bar','BarClass');
432432
$config =newContainerBuilder();
433433
$config->setDefinition('baz',newDefinition('BazClass'));
@@ -441,7 +441,7 @@ public function testMerge()
441441

442442
$container =newContainerBuilder();
443443
$container->setResourceTracking(false);
444-
$container->register('foo','FooClass');
444+
$container->register('foo','Bar\FooClass');
445445
$config->setDefinition('foo',newDefinition('BazClass'));
446446
$container->merge($config);
447447
$this->assertEquals('BazClass',$container->getDefinition('foo')->getClass(),'->merge() overrides already defined services');
@@ -466,7 +466,7 @@ public function testfindTaggedServiceIds()
466466
{
467467
$builder =newContainerBuilder();
468468
$builder
469-
->register('foo','FooClass')
469+
->register('foo','Bar\FooClass')
470470
->addTag('foo',array('foo' =>'foo'))
471471
->addTag('bar',array('bar' =>'bar'))
472472
->addTag('foo',array('foofoo' =>'foofoo'))
@@ -486,7 +486,7 @@ public function testfindTaggedServiceIds()
486486
publicfunctiontestFindDefinition()
487487
{
488488
$container =newContainerBuilder();
489-
$container->setDefinition('foo',$definition =newDefinition('FooClass'));
489+
$container->setDefinition('foo',$definition =newDefinition('Bar\FooClass'));
490490
$container->setAlias('bar','foo');
491491
$container->setAlias('foobar','bar');
492492
$this->assertEquals($definition,$container->findDefinition('foobar'),'->findDefinition() returns a Definition');

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
$container =newContainerBuilder();
1212
$container->
13-
register('foo','FooClass')->
13+
register('foo','Bar\FooClass')->
1414
addTag('foo',array('foo' =>'foo'))->
1515
addTag('foo',array('bar' =>'bar'))->
16-
setFactoryClass('FooClass')->
16+
setFactoryClass('Bar\\FooClass')->
1717
setFactoryMethod('getInstance')->
1818
setArguments(array('foo',newReference('foo.baz'),array('%foo%' =>'foo is %foo%','foobar' =>'%foo%'),true,newReference('service_container')))->
1919
setProperties(array('foo' =>'bar','moo' =>newReference('foo.baz')))->
@@ -22,7 +22,7 @@
2222
setConfigurator('sc_configure')
2323
;
2424
$container->
25-
register('bar','FooClass')->
25+
register('bar','Bar\FooClass')->
2626
setArguments(array('foo',newReference('foo.baz'),newParameter('foo_bar')))->
2727
setScope('container')->
2828
setConfigurator(array(newReference('foo.baz'),'configure'))
@@ -40,13 +40,13 @@
4040
$container->getParameterBag()->clear();
4141
$container->getParameterBag()->add(array(
4242
'baz_class' =>'BazClass',
43-
'foo_class' =>'FooClass',
43+
'foo_class' =>'Bar\FooClass',
4444
'foo' =>'bar',
4545
));
4646
$container->setAlias('alias_for_foo','foo');
4747
$container->setAlias('alias_for_alias','alias_for_foo');
4848
$container->
49-
register('method_call1','FooClass')->
49+
register('method_call1','Bar\FooClass')->
5050
setFile(realpath(__DIR__.'/../includes/foo.php'))->
5151
addMethodCall('setBar',array(newReference('foo')))->
5252
addMethodCall('setBar',array(newReference('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE)))->

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ digraph sc {
33
node [fontsize="11"fontname="Arial"shape="record"];
44
edge [fontsize="9"fontname="Arial"color="grey"arrowhead="open"arrowsize="0.5"];
55

6-
node_foo [label="foo (alias_for_foo)\nFooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
7-
node_bar [label="bar\nFooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
6+
node_foo [label="foo (alias_for_foo)\nBar\\FooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
7+
node_bar [label="bar\nBar\\FooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
88
node_foo_baz [label="foo.baz\nBazClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
9-
node_foo_bar [label="foo_bar\nFooClass\n",shape=record,fillcolor="#eeeeee",style="dotted"];
10-
node_method_call1 [label="method_call1\nFooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
9+
node_foo_bar [label="foo_bar\nBar\\FooClass\n",shape=record,fillcolor="#eeeeee",style="dotted"];
10+
node_method_call1 [label="method_call1\nBar\\FooClass\n",shape=record,fillcolor="#eeeeee",style="filled"];
1111
node_factory_service [label="factory_service\nBar\n",shape=record,fillcolor="#eeeeee",style="filled"];
1212
node_foo_with_inline [label="foo_with_inline\nFoo\n",shape=record,fillcolor="#eeeeee",style="filled"];
1313
node_inlined [label="inlined\nBar\n",shape=record,fillcolor="#eeeeee",style="filled"];

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/foo.php‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
namespaceBar;
4+
35
class FooClass
46
{
57
public$foo,$moo;

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ public function __construct()
4949
* This service is shared.
5050
* This method always returns the same instance of the service.
5151
*
52-
* @return FooClass A FooClass instance.
52+
* @returnBar\FooClass ABar\FooClass instance.
5353
*/
5454
protectedfunctiongetBarService()
5555
{
5656
$a =$this->get('foo.baz');
5757

58-
$this->services['bar'] =$instance =new \FooClass('foo',$a,$this->getParameter('foo_bar'));
58+
$this->services['bar'] =$instance =new \Bar\FooClass('foo',$a,$this->getParameter('foo_bar'));
5959

6060
$a->configure($instance);
6161

@@ -132,13 +132,13 @@ protected function getFactoryServiceService()
132132
* This service is shared.
133133
* This method always returns the same instance of the service.
134134
*
135-
* @return FooClass A FooClass instance.
135+
* @returnBar\FooClass ABar\FooClass instance.
136136
*/
137137
protectedfunctiongetFooService()
138138
{
139139
$a =$this->get('foo.baz');
140140

141-
$this->services['foo'] =$instance = \FooClass::getInstance('foo',$a,array($this->getParameter('foo') =>'foo is'.$this->getParameter('foo').'','foobar' =>$this->getParameter('foo')),true,$this);
141+
$this->services['foo'] =$instance = \Bar\FooClass::getInstance('foo',$a,array($this->getParameter('foo') =>'foo is'.$this->getParameter('foo').'','foobar' =>$this->getParameter('foo')),true,$this);
142142

143143
$instance->setBar($this->get('bar'));
144144
$instance->initialize();
@@ -201,13 +201,13 @@ protected function getFooWithInlineService()
201201
* This service is shared.
202202
* This method always returns the same instance of the service.
203203
*
204-
* @return FooClass A FooClass instance.
204+
* @returnBar\FooClass ABar\FooClass instance.
205205
*/
206206
protectedfunctiongetMethodCall1Service()
207207
{
208208
require_once'%path%foo.php';
209209

210-
$this->services['method_call1'] =$instance =new \FooClass();
210+
$this->services['method_call1'] =$instance =new \Bar\FooClass();
211211

212212
$instance->setBar($this->get('foo'));
213213
$instance->setBar($this->get('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE));
@@ -297,7 +297,7 @@ protected function getDefaultParameters()
297297
{
298298
returnarray(
299299
'baz_class' =>'BazClass',
300-
'foo_class' =>'FooClass',
300+
'foo_class' =>'Bar\\FooClass',
301301
'foo' =>'bar',
302302
);
303303
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp