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

Appearance settings

Commit ffddafc

Browse filesBrowse files
committed
feature #15196 [HttpKernel] make RequestStack parameter required (Tobion)
This PR was merged into the 3.0-dev branch. Discussion ---------- [HttpKernel] make RequestStack parameter required | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | BC breaks? | yes | Deprecations? | no | Tests pass? | yes | Fixed tickets | n/a | License | MIT | Doc PR | n/a Continuation of #14634, #8904 Commits ------- a2e154d [HttpKernel] make RequestStack parameter required for classes that need it
2 parents aff5af6 + a2e154d commit ffddafc
Copy full SHA for ffddafc

File tree

5 files changed

+15
-133
lines changed
Filter options

5 files changed

+15
-133
lines changed

‎src/Symfony/Component/HttpKernel/DependencyInjection/LazyLoadingFragmentHandler.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/DependencyInjection/LazyLoadingFragmentHandler.php
+1-13Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,14 @@ class LazyLoadingFragmentHandler extends FragmentHandler
2828
/**
2929
* Constructor.
3030
*
31-
* RequestStack will become required in 3.0.
32-
*
3331
* @param ContainerInterface $container A container
3432
* @param RequestStack $requestStack The Request stack that controls the lifecycle of requests
3533
* @param bool $debug Whether the debug mode is enabled or not
3634
*/
37-
public function __construct(ContainerInterface $container, $requestStack = null, $debug = false)
35+
public function __construct(ContainerInterface $container, RequestStack $requestStack, $debug = false)
3836
{
3937
$this->container = $container;
4038

41-
if ((null !== $requestStack && !$requestStack instanceof RequestStack) || $debug instanceof RequestStack) {
42-
$tmp = $debug;
43-
$debug = $requestStack;
44-
$requestStack = func_num_args() < 3 ? null : $tmp;
45-
46-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack to be given as second argument as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
47-
} elseif (!$requestStack instanceof RequestStack) {
48-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
49-
}
50-
5139
parent::__construct($requestStack, array(), $debug);
5240
}
5341

‎src/Symfony/Component/HttpKernel/EventListener/LocaleListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/EventListener/LocaleListener.php
+1-32Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@
2222
/**
2323
* Initializes the locale based on the current request.
2424
*
25-
* This listener works in 2 modes:
26-
*
27-
* * 2.3 compatibility mode where you must call setRequest whenever the Request changes.
28-
* * 2.4+ mode where you must pass a RequestStack instance in the constructor.
29-
*
3025
* @author Fabien Potencier <fabien@symfony.com>
3126
*/
3227
class LocaleListener implements EventSubscriberInterface
@@ -38,34 +33,12 @@ class LocaleListener implements EventSubscriberInterface
3833
/**
3934
* Constructor.
4035
*
41-
* RequestStack will become required in 3.0.
42-
*
4336
* @param RequestStack $requestStack A RequestStack instance
4437
* @param string $defaultLocale The default locale
4538
* @param RequestContextAwareInterface|null $router The router
46-
*
47-
* @throws \InvalidArgumentException
4839
*/
49-
public function __construct($requestStack = null, $defaultLocale = 'en', $router = null)
40+
public function __construct(RequestStack $requestStack, $defaultLocale = 'en', RequestContextAwareInterface $router = null)
5041
{
51-
if ((null !== $requestStack && !$requestStack instanceof RequestStack) || $defaultLocale instanceof RequestContextAwareInterface || $router instanceof RequestStack) {
52-
$tmp = $router;
53-
$router = func_num_args() < 2 ? null : $defaultLocale;
54-
$defaultLocale = $requestStack;
55-
$requestStack = func_num_args() < 3 ? null : $tmp;
56-
57-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack to be given as first argument as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
58-
} elseif (!$requestStack instanceof RequestStack) {
59-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
60-
}
61-
62-
if (null !== $requestStack && !$requestStack instanceof RequestStack) {
63-
throw new \InvalidArgumentException('RequestStack instance expected.');
64-
}
65-
if (null !== $router && !$router instanceof RequestContextAwareInterface) {
66-
throw new \InvalidArgumentException('Router must implement RequestContextAwareInterface.');
67-
}
68-
6942
$this->defaultLocale = $defaultLocale;
7043
$this->requestStack = $requestStack;
7144
$this->router = $router;
@@ -82,10 +55,6 @@ public function onKernelRequest(GetResponseEvent $event)
8255

8356
public function onKernelFinishRequest(FinishRequestEvent $event)
8457
{
85-
if (null === $this->requestStack) {
86-
return; // removed when requestStack is required
87-
}
88-
8958
if (null !== $parentRequest = $this->requestStack->getParentRequest()) {
9059
$this->setRouterContext($parentRequest);
9160
}

‎src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php
+1-10Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class ProfilerListener implements EventSubscriberInterface
3232
protected $onlyException;
3333
protected $onlyMasterRequests;
3434
protected $exception;
35-
protected $requests = array();
3635
protected $profiles;
3736
protected $requestStack;
3837
protected $parents;
@@ -101,14 +100,7 @@ public function onKernelResponse(FilterResponseEvent $event)
101100

102101
$this->profiles[$request] = $profile;
103102

104-
if (null !== $this->requestStack) {
105-
$this->parents[$request] = $this->requestStack->getParentRequest();
106-
} elseif (!$master) {
107-
// to be removed when requestStack is required
108-
array_pop($this->requests);
109-
110-
$this->parents[$request] = end($this->requests);
111-
}
103+
$this->parents[$request] = $this->requestStack->getParentRequest();
112104
}
113105

114106
public function onKernelTerminate(PostResponseEvent $event)
@@ -130,7 +122,6 @@ public function onKernelTerminate(PostResponseEvent $event)
130122

131123
$this->profiles = new \SplObjectStorage();
132124
$this->parents = new \SplObjectStorage();
133-
$this->requests = array();
134125
}
135126

136127
public static function getSubscribedEvents()

‎src/Symfony/Component/HttpKernel/EventListener/RouterListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/EventListener/RouterListener.php
+9-44Lines changed: 9 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -30,56 +30,27 @@
3030
/**
3131
* Initializes the context from the request and sets request attributes based on a matching route.
3232
*
33-
* This listener works in 2 modes:
34-
*
35-
* * 2.3 compatibility mode where you must call setRequest whenever the Request changes.
36-
* * 2.4+ mode where you must pass a RequestStack instance in the constructor.
37-
*
3833
* @author Fabien Potencier <fabien@symfony.com>
3934
*/
4035
class RouterListener implements EventSubscriberInterface
4136
{
4237
private $matcher;
4338
private $context;
4439
private $logger;
45-
private $request;
4640
private $requestStack;
4741

4842
/**
4943
* Constructor.
5044
*
51-
* RequestStack will become required in 3.0.
52-
*
5345
* @param UrlMatcherInterface|RequestMatcherInterface $matcher The Url or Request matcher
5446
* @param RequestStack $requestStack A RequestStack instance
5547
* @param RequestContext|null $context The RequestContext (can be null when $matcher implements RequestContextAwareInterface)
5648
* @param LoggerInterface|null $logger The logger
5749
*
5850
* @throws \InvalidArgumentException
5951
*/
60-
public function __construct($matcher, $requestStack = null, $context = null, $logger = null)
52+
public function __construct($matcher, RequestStack $requestStack, RequestContext $context = null, LoggerInterface $logger = null)
6153
{
62-
if ($requestStack instanceof RequestContext || $context instanceof LoggerInterface || $logger instanceof RequestStack) {
63-
$tmp = $requestStack;
64-
$requestStack = $logger;
65-
$logger = $context;
66-
$context = $tmp;
67-
68-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack to be given as second argument as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
69-
} elseif (!$requestStack instanceof RequestStack) {
70-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
71-
}
72-
73-
if (null !== $requestStack && !$requestStack instanceof RequestStack) {
74-
throw new \InvalidArgumentException('RequestStack instance expected.');
75-
}
76-
if (null !== $context && !$context instanceof RequestContext) {
77-
throw new \InvalidArgumentException('RequestContext instance expected.');
78-
}
79-
if (null !== $logger && !$logger instanceof LoggerInterface) {
80-
throw new \InvalidArgumentException('Logger must implement LoggerInterface.');
81-
}
82-
8354
if (!$matcher instanceof UrlMatcherInterface && !$matcher instanceof RequestMatcherInterface) {
8455
throw new \InvalidArgumentException('Matcher must either implement UrlMatcherInterface or RequestMatcherInterface.');
8556
}
@@ -96,33 +67,27 @@ public function __construct($matcher, $requestStack = null, $context = null, $lo
9667

9768
private function setCurrentRequest(Request $request = null)
9869
{
99-
if (null !== $request && $this->request !== $request) {
70+
if (null !== $request) {
10071
$this->context->fromRequest($request);
10172
}
102-
103-
$this->request = $request;
10473
}
10574

75+
/**
76+
* After a sub-request is done, we need to reset the routing context to the parent request so that the URL generator
77+
* operates on the correct context again.
78+
*
79+
* @param FinishRequestEvent $event
80+
*/
10681
public function onKernelFinishRequest(FinishRequestEvent $event)
10782
{
108-
if (null === $this->requestStack) {
109-
return; // removed when requestStack is required
110-
}
111-
11283
$this->setCurrentRequest($this->requestStack->getParentRequest());
11384
}
11485

11586
public function onKernelRequest(GetResponseEvent $event)
11687
{
11788
$request = $event->getRequest();
11889

119-
// initialize the context that is also used by the generator (assuming matcher and generator share the same context instance)
120-
// we call setCurrentRequest even if most of the time, it has already been done to keep compatibility
121-
// with frameworks which do not use the Symfony service container
122-
// when we have a RequestStack, no need to do it
123-
if (null !== $this->requestStack) {
124-
$this->setCurrentRequest($request);
125-
}
90+
$this->setCurrentRequest($request);
12691

12792
if ($request->attributes->has('_controller')) {
12893
// routing is already done

‎src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php
+3-34Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@
2323
* This class handles the rendering of resource fragments that are included into
2424
* a main resource. The handling of the rendering is managed by specialized renderers.
2525
*
26-
* This listener works in 2 modes:
27-
*
28-
* * 2.3 compatibility mode where you must call setRequest whenever the Request changes.
29-
* * 2.4+ mode where you must pass a RequestStack instance in the constructor.
30-
*
3126
* @author Fabien Potencier <fabien@symfony.com>
3227
*
3328
* @see FragmentRendererInterface
@@ -36,38 +31,17 @@ class FragmentHandler
3631
{
3732
private $debug;
3833
private $renderers = array();
39-
private $request;
4034
private $requestStack;
4135

4236
/**
4337
* Constructor.
4438
*
45-
* RequestStack will become required in 3.0.
46-
*
4739
* @param RequestStack $requestStack The Request stack that controls the lifecycle of requests
4840
* @param FragmentRendererInterface[] $renderers An array of FragmentRendererInterface instances
4941
* @param bool $debug Whether the debug mode is enabled or not
5042
*/
51-
public function __construct($requestStack = null, $renderers = array(), $debug = false)
43+
public function __construct(RequestStack $requestStack, array $renderers = array(), $debug = false)
5244
{
53-
if (is_array($requestStack)) {
54-
$tmp = $debug;
55-
$debug = func_num_args() < 2 ? false : $renderers;
56-
$renderers = $requestStack;
57-
$requestStack = func_num_args() < 3 ? null : $tmp;
58-
59-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack to be given as first argument as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
60-
} elseif (!$requestStack instanceof RequestStack) {
61-
@trigger_error('The '.__METHOD__.' method now requires a RequestStack instance as '.__CLASS__.'::setRequest method will not be supported anymore in 3.0.', E_USER_DEPRECATED);
62-
}
63-
64-
if (null !== $requestStack && !$requestStack instanceof RequestStack) {
65-
throw new \InvalidArgumentException('RequestStack instance expected.');
66-
}
67-
if (!is_array($renderers)) {
68-
throw new \InvalidArgumentException('Renderers must be an array.');
69-
}
70-
7145
$this->requestStack = $requestStack;
7246
foreach ($renderers as $renderer) {
7347
$this->addRenderer($renderer);
@@ -111,7 +85,7 @@ public function render($uri, $renderer = 'inline', array $options = array())
11185
throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer));
11286
}
11387

114-
if (!$request = $this->getRequest()) {
88+
if (!$request = $this->requestStack->getCurrentRequest()) {
11589
throw new \LogicException('Rendering a fragment can only be done when handling a Request.');
11690
}
11791

@@ -133,7 +107,7 @@ public function render($uri, $renderer = 'inline', array $options = array())
133107
protected function deliver(Response $response)
134108
{
135109
if (!$response->isSuccessful()) {
136-
throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $this->getRequest()->getUri(), $response->getStatusCode()));
110+
throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $this->requestStack->getCurrentRequest()->getUri(), $response->getStatusCode()));
137111
}
138112

139113
if (!$response instanceof StreamedResponse) {
@@ -142,9 +116,4 @@ protected function deliver(Response $response)
142116

143117
$response->sendContent();
144118
}
145-
146-
private function getRequest()
147-
{
148-
return $this->requestStack ? $this->requestStack->getCurrentRequest() : $this->request;
149-
}
150119
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.