Skip to content

Commit 4f3d502

Browse files
committed
[FrameworkBundle] removed some more dependencies on the request service
1 parent 8bee688 commit 4f3d502

File tree

6 files changed

+74
-26
lines changed

6 files changed

+74
-26
lines changed

UPGRADE-3.0.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ UPGRADE FROM 2.x to 3.0
178178

179179
### FrameworkBundle
180180

181+
* The `request` service was removed. You must inject the `request_stack`
182+
service instead.
183+
181184
* The `enctype` method of the `form` helper was removed. You should use the
182185
new method `start` instead.
183186

src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
YourRequestClass to the Kernel.
4444
This service definition only defines the scope of the request.
4545
It is used to check references scope.
46+
47+
This service is deprecated, you should use the request_stack service instead.
4648
-->
4749
<service id="request" scope="request" synthetic="true" synchronized="true" />
4850

src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@
6767

6868
<service id="templating.helper.request" class="%templating.helper.request.class%">
6969
<tag name="templating.helper" alias="request" />
70-
<argument type="service" id="request" strict="false" />
70+
<argument type="service" id="request_stack" />
7171
</service>
7272

7373
<service id="templating.helper.session" class="%templating.helper.session.class%">
7474
<tag name="templating.helper" alias="session" />
75-
<argument type="service" id="request" strict="false" />
75+
<argument type="service" id="request_stack" />
7676
</service>
7777

7878
<service id="templating.helper.router" class="%templating.helper.router.class%">

src/Symfony/Bundle/FrameworkBundle/Templating/Helper/RequestHelper.php

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Templating\Helper\Helper;
1515
use Symfony\Component\HttpFoundation\Request;
16+
use Symfony\Component\HttpFoundation\RequestStack;
1617

1718
/**
1819
* RequestHelper provides access to the current request parameters.
@@ -22,15 +23,24 @@
2223
class RequestHelper extends Helper
2324
{
2425
protected $request;
26+
protected $requestStack;
2527

2628
/**
2729
* Constructor.
2830
*
29-
* @param Request $request A Request instance
31+
* @param Request|RequestStack $requestStack A RequestStack instance or a Request instance
32+
*
33+
* @deprecated since 2.5, passing a Request instance is deprecated and support for it will be removed in 3.0
3034
*/
31-
public function __construct(Request $request)
35+
public function __construct($requestStack)
3236
{
33-
$this->request = $request;
37+
if ($requestStack instanceof Request) {
38+
$this->request = $requestStack;
39+
} elseif ($requestStack instanceof RequestStack) {
40+
$this->requestStack = $requestStack;
41+
} else {
42+
throw new \InvalidArgumentException('RequestHelper only accepts a Request or a RequestStack instance.');
43+
}
3444
}
3545

3646
/**
@@ -45,7 +55,7 @@ public function __construct(Request $request)
4555
*/
4656
public function getParameter($key, $default = null)
4757
{
48-
return $this->request->get($key, $default);
58+
return $this->getRequest()->get($key, $default);
4959
}
5060

5161
/**
@@ -55,7 +65,20 @@ public function getParameter($key, $default = null)
5565
*/
5666
public function getLocale()
5767
{
58-
return $this->request->getLocale();
68+
return $this->getRequest()->getLocale();
69+
}
70+
71+
private function getRequest()
72+
{
73+
if ($this->requestStack) {
74+
if (!$this->requestStack->getCurrentRequest()) {
75+
throw new \LogicException('A Request must be available.');
76+
}
77+
78+
return $this->requestStack->getCurrentRequest();
79+
}
80+
81+
return $this->request;
5982
}
6083

6184
/**

src/Symfony/Bundle/FrameworkBundle/Templating/Helper/SessionHelper.php

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Symfony\Bundle\FrameworkBundle\Templating\Helper;
1313

1414
use Symfony\Component\Templating\Helper\Helper;
15-
use Symfony\Component\HttpFoundation\Request;
15+
use Symfony\Component\HttpFoundation\RequestStack;
1616

1717
/**
1818
* SessionHelper provides read-only access to the session attributes.
@@ -22,15 +22,24 @@
2222
class SessionHelper extends Helper
2323
{
2424
protected $session;
25+
protected $requestStack;
2526

2627
/**
2728
* Constructor.
2829
*
29-
* @param Request $request A Request instance
30+
* @param Request|RequestStack $requestStack A RequestStack instance or a Request instance
31+
*
32+
* @deprecated since 2.5, passing a Request instance is deprecated and support for it will be removed in 3.0
3033
*/
31-
public function __construct(Request $request)
34+
public function __construct($requestStack)
3235
{
33-
$this->session = $request->getSession();
36+
if ($requestStack instanceof Request) {
37+
$this->session = $requestStack->getSession();
38+
} elseif ($requestStack instanceof RequestStack) {
39+
$this->requestStack = $requestStack;
40+
} else {
41+
throw new \InvalidArgumentException('RequestHelper only accepts a Request or a RequestStack instance.');
42+
}
3443
}
3544

3645
/**
@@ -43,22 +52,35 @@ public function __construct(Request $request)
4352
*/
4453
public function get($name, $default = null)
4554
{
46-
return $this->session->get($name, $default);
55+
return $this->getSession()->get($name, $default);
4756
}
4857

4958
public function getFlash($name, array $default = array())
5059
{
51-
return $this->session->getFlashBag()->get($name, $default);
60+
return $this->getSession()->getFlashBag()->get($name, $default);
5261
}
5362

5463
public function getFlashes()
5564
{
56-
return $this->session->getFlashBag()->all();
65+
return $this->getSession()->getFlashBag()->all();
5766
}
5867

5968
public function hasFlash($name)
6069
{
61-
return $this->session->getFlashBag()->has($name);
70+
return $this->getSession()->getFlashBag()->has($name);
71+
}
72+
73+
private function getSession()
74+
{
75+
if (null === $this->session) {
76+
if (!$this->requestStack->getMasterRequest()) {
77+
throw new \LogicException('A Request must be available.');
78+
}
79+
80+
$this->session = $this->requestStack->getMasterRequest()->getSession();
81+
}
82+
83+
return $this->session;
6284
}
6385

6486
/**

src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/RequestHelperTest.php

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,24 @@
1212
namespace Symfony\Bundle\FrameworkBundle\Tests\Templating\Helper;
1313

1414
use Symfony\Component\HttpFoundation\Request;
15+
use Symfony\Component\HttpFoundation\RequestStack;
1516
use Symfony\Bundle\FrameworkBundle\Templating\Helper\RequestHelper;
1617

1718
class RequestHelperTest extends \PHPUnit_Framework_TestCase
1819
{
19-
protected $request;
20+
protected $requestStack;
2021

2122
protected function setUp()
2223
{
23-
$this->request = new Request();
24-
$this->request->initialize(array('foobar' => 'bar'));
25-
}
26-
27-
protected function tearDown()
28-
{
29-
$this->request = null;
24+
$this->requestStack = new RequestStack();
25+
$request = new Request();
26+
$request->initialize(array('foobar' => 'bar'));
27+
$this->requestStack->push($request);
3028
}
3129

3230
public function testGetParameter()
3331
{
34-
$helper = new RequestHelper($this->request);
32+
$helper = new RequestHelper($this->requestStack);
3533

3634
$this->assertEquals('bar', $helper->getParameter('foobar'));
3735
$this->assertEquals('foo', $helper->getParameter('bar', 'foo'));
@@ -41,14 +39,14 @@ public function testGetParameter()
4139

4240
public function testGetLocale()
4341
{
44-
$helper = new RequestHelper($this->request);
42+
$helper = new RequestHelper($this->requestStack);
4543

4644
$this->assertEquals('en', $helper->getLocale());
4745
}
4846

4947
public function testGetName()
5048
{
51-
$helper = new RequestHelper($this->request);
49+
$helper = new RequestHelper($this->requestStack);
5250

5351
$this->assertEquals('request', $helper->getName());
5452
}

0 commit comments

Comments
 (0)