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

Commit9e78a06

Browse files
committed
Merge branch '2.4'
* 2.4: added missing unit test fixed too greedy replacements fixed protocol-relative URLs added override power to server parameters provided on request method made parsing controllers more robust Fixed YamlFileLoader imports path
2 parentsb78d174 +82cbf69 commit9e78a06

File tree

8 files changed

+172
-36
lines changed

8 files changed

+172
-36
lines changed

‎src/Symfony/Component/BrowserKit/Client.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,15 @@ public function request($method, $uri, array $parameters = array(), array $files
295295
}
296296

297297
$uri =$this->getAbsoluteUri($uri);
298+
299+
if (isset($server['HTTP_HOST'])) {
300+
$uri =preg_replace('{^(https?\://)'.parse_url($uri,PHP_URL_HOST).'}','\\1'.$server['HTTP_HOST'],$uri);
301+
}
302+
303+
if (isset($server['HTTPS'])) {
304+
$uri =preg_replace('{^'.parse_url($uri,PHP_URL_SCHEME).'}',$server['HTTPS'] ?'https' :'http',$uri);
305+
}
306+
298307
$server =array_merge($this->server,$server);
299308

300309
if (!$this->history->isEmpty()) {
@@ -509,7 +518,7 @@ public function followRedirect()
509518
}
510519

511520
$server =$request->getServer();
512-
unset($server['HTTP_IF_NONE_MATCH'],$server['HTTP_IF_MODIFIED_SINCE']);
521+
$server =$this->updateServerFromUri($server,$this->redirect);
513522

514523
$this->isMainRequest =false;
515524

@@ -591,4 +600,14 @@ protected function requestFromRequest(Request $request, $changeHistory = true)
591600
{
592601
return$this->request($request->getMethod(),$request->getUri(),$request->getParameters(),$request->getFiles(),$request->getServer(),$request->getContent(),$changeHistory);
593602
}
603+
604+
privatefunctionupdateServerFromUri($server,$uri)
605+
{
606+
$server['HTTP_HOST'] =parse_url($uri,PHP_URL_HOST);
607+
$scheme =parse_url($uri,PHP_URL_SCHEME);
608+
$server['HTTPS'] =null ===$scheme ?$server['HTTPS'] :'https' ==$scheme;
609+
unset($server['HTTP_IF_NONE_MATCH'],$server['HTTP_IF_MODIFIED_SINCE']);
610+
611+
return$server;
612+
}
594613
}

‎src/Symfony/Component/BrowserKit/Tests/ClientTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,4 +549,38 @@ public function testSetServerParameter()
549549
$client->setServerParameter('HTTP_USER_AGENT','testua');
550550
$this->assertEquals('testua',$client->getServerParameter('HTTP_USER_AGENT'));
551551
}
552+
553+
publicfunctiontestSetServerParameterInRequest()
554+
{
555+
$client =newTestClient();
556+
557+
$this->assertEquals('localhost',$client->getServerParameter('HTTP_HOST'));
558+
$this->assertEquals('Symfony2 BrowserKit',$client->getServerParameter('HTTP_USER_AGENT'));
559+
560+
$client->request('GET','https://www.example.com/https/www.example.com',array(),array(),array(
561+
'HTTP_HOST' =>'testhost',
562+
'HTTP_USER_AGENT' =>'testua',
563+
'HTTPS' =>false,
564+
'NEW_SERVER_KEY' =>'new-server-key-value'
565+
));
566+
567+
$this->assertEquals('localhost',$client->getServerParameter('HTTP_HOST'));
568+
$this->assertEquals('Symfony2 BrowserKit',$client->getServerParameter('HTTP_USER_AGENT'));
569+
570+
$this->assertEquals('http://testhost/https/www.example.com',$client->getRequest()->getUri());
571+
572+
$server =$client->getRequest()->getServer();
573+
574+
$this->assertArrayHasKey('HTTP_USER_AGENT',$server);
575+
$this->assertEquals('testua',$server['HTTP_USER_AGENT']);
576+
577+
$this->assertArrayHasKey('HTTP_HOST',$server);
578+
$this->assertEquals('testhost',$server['HTTP_HOST']);
579+
580+
$this->assertArrayHasKey('NEW_SERVER_KEY',$server);
581+
$this->assertEquals('new-server-key-value',$server['NEW_SERVER_KEY']);
582+
583+
$this->assertArrayHasKey('HTTPS',$server);
584+
$this->assertFalse($server['HTTPS']);
585+
}
552586
}

‎src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function load($file, $type = null)
5252
}
5353

5454
// imports
55-
$this->parseImports($content,$file);
55+
$this->parseImports($content,$path);
5656

5757
// parameters
5858
if (isset($content['parameters'])) {

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
useSymfony\Component\DependencyInjection\ContainerInterface;
2222
useSymfony\Component\DependencyInjection\Definition;
2323
useSymfony\Component\DependencyInjection\Exception\RuntimeException;
24+
useSymfony\Component\DependencyInjection\Exception\InactiveScopeException;
2425
useSymfony\Component\DependencyInjection\Loader\ClosureLoader;
2526
useSymfony\Component\DependencyInjection\Reference;
2627
useSymfony\Component\DependencyInjection\ParameterBag\ParameterBag;
@@ -152,6 +153,16 @@ public function testGetReturnsNullOnInactiveScope()
152153
$this->assertNull($builder->get('foo', ContainerInterface::NULL_ON_INVALID_REFERENCE));
153154
}
154155

156+
/**
157+
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::get
158+
*/
159+
publicfunctiontestGetReturnsNullOnInactiveScopeWhenServiceIsCreatedByAMethod()
160+
{
161+
$builder =newProjectContainer();
162+
163+
$this->assertNull($builder->get('foobaz', ContainerInterface::NULL_ON_INVALID_REFERENCE));
164+
}
165+
155166
/**
156167
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::getServiceIds
157168
*/
@@ -790,8 +801,16 @@ public function testLazyLoadedService()
790801
}
791802
}
792803

793-
$this->assertEquals(true,$classInList);
804+
$this->assertTrue($classInList);
794805
}
795806
}
796807

797808
class FooClass {}
809+
810+
class ProjectContainerextends ContainerBuilder
811+
{
812+
publicfunctiongetFoobazService()
813+
{
814+
thrownewInactiveScopeException('foo','request');
815+
}
816+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
imports:
22
-{ resource: services2.yml }
33
-{ resource: services3.yml }
4+
-{ resource: "../php/simple.php" }
45
-{ resource: "../ini/parameters.ini", class: Symfony\Component\DependencyInjection\Loader\IniFileLoader }
56
-{ resource: "../ini/parameters2.ini" }
67
-{ resource: "../xml/services13.xml" }

‎src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
useSymfony\Component\DependencyInjection\Loader\XmlFileLoader;
1919
useSymfony\Component\DependencyInjection\Loader\YamlFileLoader;
2020
useSymfony\Component\DependencyInjection\Loader\IniFileLoader;
21+
useSymfony\Component\DependencyInjection\Loader\PhpFileLoader;
2122
useSymfony\Component\Config\Loader\LoaderResolver;
2223
useSymfony\Component\Config\FileLocator;
2324
useSymfony\Component\ExpressionLanguage\Expression;
@@ -83,6 +84,7 @@ public function testLoadImports()
8384
$resolver =newLoaderResolver(array(
8485
newIniFileLoader($container,newFileLocator(self::$fixturesPath.'/yaml')),
8586
newXmlFileLoader($container,newFileLocator(self::$fixturesPath.'/yaml')),
87+
newPhpFileLoader($container,newFileLocator(self::$fixturesPath.'/php')),
8688
$loader =newYamlFileLoader($container,newFileLocator(self::$fixturesPath.'/yaml')),
8789
));
8890
$loader->setResolver($resolver);

‎src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,18 @@ public function getController(Request $request)
5757
returnfalse;
5858
}
5959

60-
if (is_array($controller) || (is_object($controller) &&method_exists($controller,'__invoke'))) {
60+
if (is_array($controller)) {
6161
return$controller;
6262
}
6363

64+
if (is_object($controller)) {
65+
if (method_exists($controller,'__invoke')) {
66+
return$controller;
67+
}
68+
69+
thrownew \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.',get_class($controller),$request->getPathInfo()));
70+
}
71+
6472
if (false ===strpos($controller,':')) {
6573
if (method_exists($controller,'__invoke')) {
6674
returnnew$controller();
@@ -72,7 +80,7 @@ public function getController(Request $request)
7280
$callable =$this->createController($controller);
7381

7482
if (!is_callable($callable)) {
75-
thrownew \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable.',$request->getPathInfo()));
83+
thrownew \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.',$controller,$request->getPathInfo()));
7684
}
7785

7886
return$callable;

‎src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php

Lines changed: 84 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,66 +17,119 @@
1717

1818
class ControllerResolverTestextends \PHPUnit_Framework_TestCase
1919
{
20-
publicfunctiontestGetController()
20+
publicfunctiontestGetControllerWithoutControllerParameter()
2121
{
22-
$logger =newLogger();
22+
$logger =$this->getMock('Psr\Log\LoggerInterface');
23+
$logger->expects($this->once())->method('warning')->with('Unable to look for the controller as the "_controller" parameter is missing');
2324
$resolver =newControllerResolver($logger);
2425

2526
$request = Request::create('/');
2627
$this->assertFalse($resolver->getController($request),'->getController() returns false when the request has no _controller attribute');
27-
$this->assertEquals(array('Unable to look for the controller as the "_controller" parameter is missing'),$logger->getLogs('warning'));
28+
}
2829

29-
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::testGetController');
30-
$controller =$resolver->getController($request);
31-
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest',$controller[0],'->getController() returns a PHP callable');
30+
publicfunctiontestGetControllerWithLambda()
31+
{
32+
$resolver =newControllerResolver();
3233

34+
$request = Request::create('/');
3335
$request->attributes->set('_controller',$lambda =function () {});
3436
$controller =$resolver->getController($request);
3537
$this->assertSame($lambda,$controller);
38+
}
3639

40+
publicfunctiontestGetControllerWithObjectAndInvokeMethod()
41+
{
42+
$resolver =newControllerResolver();
43+
44+
$request = Request::create('/');
3745
$request->attributes->set('_controller',$this);
3846
$controller =$resolver->getController($request);
3947
$this->assertSame($this,$controller);
48+
}
4049

41-
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest');
42-
$controller =$resolver->getController($request);
43-
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest',$controller);
50+
publicfunctiontestGetControllerWithObjectAndMethod()
51+
{
52+
$resolver =newControllerResolver();
4453

54+
$request = Request::create('/');
4555
$request->attributes->set('_controller',array($this,'controllerMethod1'));
4656
$controller =$resolver->getController($request);
4757
$this->assertSame(array($this,'controllerMethod1'),$controller);
58+
}
4859

60+
publicfunctiontestGetControllerWithClassAndMethod()
61+
{
62+
$resolver =newControllerResolver();
63+
64+
$request = Request::create('/');
4965
$request->attributes->set('_controller',array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest','controllerMethod4'));
5066
$controller =$resolver->getController($request);
5167
$this->assertSame(array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest','controllerMethod4'),$controller);
68+
}
69+
70+
publicfunctiontestGetControllerWithObjectAndMethodAsString()
71+
{
72+
$resolver =newControllerResolver();
73+
74+
$request = Request::create('/');
75+
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::controllerMethod1');
76+
$controller =$resolver->getController($request);
77+
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest',$controller[0],'->getController() returns a PHP callable');
78+
}
79+
80+
publicfunctiontestGetControllerWithClassAndInvokeMethod()
81+
{
82+
$resolver =newControllerResolver();
83+
84+
$request = Request::create('/');
85+
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest');
86+
$controller =$resolver->getController($request);
87+
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest',$controller);
88+
}
89+
90+
/**
91+
* @expectedException \InvalidArgumentException
92+
*/
93+
publicfunctiontestGetControllerOnObjectWithoutInvokeMethod()
94+
{
95+
$resolver =newControllerResolver();
96+
97+
$request = Request::create('/');
98+
$request->attributes->set('_controller',new \stdClass());
99+
$resolver->getController($request);
100+
}
101+
102+
publicfunctiontestGetControllerWithFunction()
103+
{
104+
$resolver =newControllerResolver();
52105

106+
$request = Request::create('/');
53107
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\some_controller_function');
54108
$controller =$resolver->getController($request);
55109
$this->assertSame('Symfony\Component\HttpKernel\Tests\Controller\some_controller_function',$controller);
110+
}
56111

57-
$request->attributes->set('_controller','foo');
58-
try {
59-
$resolver->getController($request);
60-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted');
61-
}catch (\Exception$e) {
62-
$this->assertInstanceOf('\InvalidArgumentException',$e,'->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted');
63-
}
112+
/**
113+
* @dataProvider getUndefinedControllers
114+
* @expectedException \InvalidArgumentException
115+
*/
116+
publicfunctiontestGetControllerOnNonUndefinedFunction($controller)
117+
{
118+
$resolver =newControllerResolver();
64119

65-
$request->attributes->set('_controller','foo::bar');
66-
try {
67-
$resolver->getController($request);
68-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class');
69-
}catch (\Exception$e) {
70-
$this->assertInstanceOf('\InvalidArgumentException',$e,'->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class');
71-
}
120+
$request = Request::create('/');
121+
$request->attributes->set('_controller',$controller);
122+
$resolver->getController($request);
123+
}
72124

73-
$request->attributes->set('_controller','Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar');
74-
try {
75-
$resolver->getController($request);
76-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method');
77-
}catch (\Exception$e) {
78-
$this->assertInstanceOf('\InvalidArgumentException',$e,'->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method');
79-
}
125+
publicfunctiongetUndefinedControllers()
126+
{
127+
returnarray(
128+
array('foo'),
129+
array('foo::bar'),
130+
array('stdClass'),
131+
array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar'),
132+
);
80133
}
81134

82135
publicfunctiontestGetArguments()
@@ -158,7 +211,7 @@ public function __invoke($foo, $bar = null)
158211
{
159212
}
160213

161-
protectedfunctioncontrollerMethod1($foo)
214+
publicfunctioncontrollerMethod1($foo)
162215
{
163216
}
164217

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp