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 1a4c254

Browse filesBrowse files
[FramworkBundle][HttpKernel] fix KernelBrowser BC layer
1 parent a6b306d commit 1a4c254
Copy full SHA for 1a4c254

File tree

4 files changed

+377
-371
lines changed
Filter options

4 files changed

+377
-371
lines changed

‎src/Symfony/Bundle/FrameworkBundle/Client.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Client.php
+190-2Lines changed: 190 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,196 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle;
1313

14-
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', Client::class, KernelBrowser::class), E_USER_DEPRECATED);
14+
use Symfony\Component\BrowserKit\CookieJar;
15+
use Symfony\Component\BrowserKit\History;
16+
use Symfony\Component\DependencyInjection\ContainerInterface;
17+
use Symfony\Component\HttpFoundation\Request;
18+
use Symfony\Component\HttpFoundation\Response;
19+
use Symfony\Component\HttpKernel\HttpKernelBrowser;
20+
use Symfony\Component\HttpKernel\KernelInterface;
21+
use Symfony\Component\HttpKernel\Profiler\Profile as HttpProfile;
1522

16-
class Client extends KernelBrowser
23+
/**
24+
* Client simulates a browser and makes requests to a Kernel object.
25+
*
26+
* @deprecated since Symfony 4.3, use KernelBrowser instead.
27+
*/
28+
class Client extends HttpKernelBrowser
1729
{
30+
private $hasPerformedRequest = false;
31+
private $profiler = false;
32+
private $reboot = true;
33+
34+
/**
35+
* {@inheritdoc}
36+
*/
37+
public function __construct(KernelInterface $kernel, array $server = [], History $history = null, CookieJar $cookieJar = null)
38+
{
39+
parent::__construct($kernel, $server, $history, $cookieJar);
40+
}
41+
42+
/**
43+
* Returns the container.
44+
*
45+
* @return ContainerInterface|null Returns null when the Kernel has been shutdown or not started yet
46+
*/
47+
public function getContainer()
48+
{
49+
return $this->kernel->getContainer();
50+
}
51+
52+
/**
53+
* Returns the kernel.
54+
*
55+
* @return KernelInterface
56+
*/
57+
public function getKernel()
58+
{
59+
return $this->kernel;
60+
}
61+
62+
/**
63+
* Gets the profile associated with the current Response.
64+
*
65+
* @return HttpProfile|false A Profile instance
66+
*/
67+
public function getProfile()
68+
{
69+
if (!$this->kernel->getContainer()->has('profiler')) {
70+
return false;
71+
}
72+
73+
return $this->kernel->getContainer()->get('profiler')->loadProfileFromResponse($this->response);
74+
}
75+
76+
/**
77+
* Enables the profiler for the very next request.
78+
*
79+
* If the profiler is not enabled, the call to this method does nothing.
80+
*/
81+
public function enableProfiler()
82+
{
83+
if ($this->kernel->getContainer()->has('profiler')) {
84+
$this->profiler = true;
85+
}
86+
}
87+
88+
/**
89+
* Disables kernel reboot between requests.
90+
*
91+
* By default, the Client reboots the Kernel for each request. This method
92+
* allows to keep the same kernel across requests.
93+
*/
94+
public function disableReboot()
95+
{
96+
$this->reboot = false;
97+
}
98+
99+
/**
100+
* Enables kernel reboot between requests.
101+
*/
102+
public function enableReboot()
103+
{
104+
$this->reboot = true;
105+
}
106+
107+
/**
108+
* {@inheritdoc}
109+
*
110+
* @param Request $request A Request instance
111+
*
112+
* @return Response A Response instance
113+
*/
114+
protected function doRequest($request)
115+
{
116+
// avoid shutting down the Kernel if no request has been performed yet
117+
// WebTestCase::createClient() boots the Kernel but do not handle a request
118+
if ($this->hasPerformedRequest && $this->reboot) {
119+
$this->kernel->shutdown();
120+
} else {
121+
$this->hasPerformedRequest = true;
122+
}
123+
124+
if ($this->profiler) {
125+
$this->profiler = false;
126+
127+
$this->kernel->boot();
128+
$this->kernel->getContainer()->get('profiler')->enable();
129+
}
130+
131+
return parent::doRequest($request);
132+
}
133+
134+
/**
135+
* {@inheritdoc}
136+
*
137+
* @param Request $request A Request instance
138+
*
139+
* @return Response A Response instance
140+
*/
141+
protected function doRequestInProcess($request)
142+
{
143+
$response = parent::doRequestInProcess($request);
144+
145+
$this->profiler = false;
146+
147+
return $response;
148+
}
149+
150+
/**
151+
* Returns the script to execute when the request must be insulated.
152+
*
153+
* It assumes that the autoloader is named 'autoload.php' and that it is
154+
* stored in the same directory as the kernel (this is the case for the
155+
* Symfony Standard Edition). If this is not your case, create your own
156+
* client and override this method.
157+
*
158+
* @param Request $request A Request instance
159+
*
160+
* @return string The script content
161+
*/
162+
protected function getScript($request)
163+
{
164+
$kernel = var_export(serialize($this->kernel), true);
165+
$request = var_export(serialize($request), true);
166+
$errorReporting = error_reporting();
167+
168+
$requires = '';
169+
foreach (get_declared_classes() as $class) {
170+
if (0 === strpos($class, 'ComposerAutoloaderInit')) {
171+
$r = new \ReflectionClass($class);
172+
$file = \dirname(\dirname($r->getFileName())).'/autoload.php';
173+
if (file_exists($file)) {
174+
$requires .= 'require_once '.var_export($file, true).";\n";
175+
}
176+
}
177+
}
178+
179+
if (!$requires) {
180+
throw new \RuntimeException('Composer autoloader not found.');
181+
}
182+
183+
$requires .= 'require_once '.var_export((new \ReflectionObject($this->kernel))->getFileName(), true).";\n";
184+
185+
$profilerCode = '';
186+
if ($this->profiler) {
187+
$profilerCode = '$kernel->getContainer()->get(\'profiler\')->enable();';
188+
}
189+
190+
$code = <<<EOF
191+
<?php
192+
193+
error_reporting($errorReporting);
194+
195+
$requires
196+
197+
\$kernel = unserialize($kernel);
198+
\$kernel->boot();
199+
$profilerCode
200+
201+
\$request = unserialize($request);
202+
EOF;
203+
204+
return $code.$this->getHandleScript();
205+
}
18206
}

‎src/Symfony/Bundle/FrameworkBundle/KernelBrowser.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/KernelBrowser.php
+1-186Lines changed: 1 addition & 186 deletions
Original file line numberDiff line numberDiff line change
@@ -11,196 +11,11 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle;
1313

14-
use Symfony\Component\BrowserKit\CookieJar;
15-
use Symfony\Component\BrowserKit\History;
16-
use Symfony\Component\DependencyInjection\ContainerInterface;
17-
use Symfony\Component\HttpFoundation\Request;
18-
use Symfony\Component\HttpFoundation\Response;
19-
use Symfony\Component\HttpKernel\HttpKernelBrowser;
20-
use Symfony\Component\HttpKernel\KernelInterface;
21-
use Symfony\Component\HttpKernel\Profiler\Profile as HttpProfile;
22-
2314
/**
2415
* Client simulates a browser and makes requests to a Kernel object.
2516
*
2617
* @author Fabien Potencier <fabien@symfony.com>
2718
*/
28-
class KernelBrowser extends HttpKernelBrowser
19+
class KernelBrowser extends Client
2920
{
30-
private $hasPerformedRequest = false;
31-
private $profiler = false;
32-
private $reboot = true;
33-
34-
/**
35-
* {@inheritdoc}
36-
*/
37-
public function __construct(KernelInterface $kernel, array $server = [], History $history = null, CookieJar $cookieJar = null)
38-
{
39-
parent::__construct($kernel, $server, $history, $cookieJar);
40-
}
41-
42-
/**
43-
* Returns the container.
44-
*
45-
* @return ContainerInterface|null Returns null when the Kernel has been shutdown or not started yet
46-
*/
47-
public function getContainer()
48-
{
49-
return $this->kernel->getContainer();
50-
}
51-
52-
/**
53-
* Returns the kernel.
54-
*
55-
* @return KernelInterface
56-
*/
57-
public function getKernel()
58-
{
59-
return $this->kernel;
60-
}
61-
62-
/**
63-
* Gets the profile associated with the current Response.
64-
*
65-
* @return HttpProfile|false A Profile instance
66-
*/
67-
public function getProfile()
68-
{
69-
if (!$this->kernel->getContainer()->has('profiler')) {
70-
return false;
71-
}
72-
73-
return $this->kernel->getContainer()->get('profiler')->loadProfileFromResponse($this->response);
74-
}
75-
76-
/**
77-
* Enables the profiler for the very next request.
78-
*
79-
* If the profiler is not enabled, the call to this method does nothing.
80-
*/
81-
public function enableProfiler()
82-
{
83-
if ($this->kernel->getContainer()->has('profiler')) {
84-
$this->profiler = true;
85-
}
86-
}
87-
88-
/**
89-
* Disables kernel reboot between requests.
90-
*
91-
* By default, the Client reboots the Kernel for each request. This method
92-
* allows to keep the same kernel across requests.
93-
*/
94-
public function disableReboot()
95-
{
96-
$this->reboot = false;
97-
}
98-
99-
/**
100-
* Enables kernel reboot between requests.
101-
*/
102-
public function enableReboot()
103-
{
104-
$this->reboot = true;
105-
}
106-
107-
/**
108-
* {@inheritdoc}
109-
*
110-
* @param Request $request A Request instance
111-
*
112-
* @return Response A Response instance
113-
*/
114-
protected function doRequest($request)
115-
{
116-
// avoid shutting down the Kernel if no request has been performed yet
117-
// WebTestCase::createClient() boots the Kernel but do not handle a request
118-
if ($this->hasPerformedRequest && $this->reboot) {
119-
$this->kernel->shutdown();
120-
} else {
121-
$this->hasPerformedRequest = true;
122-
}
123-
124-
if ($this->profiler) {
125-
$this->profiler = false;
126-
127-
$this->kernel->boot();
128-
$this->kernel->getContainer()->get('profiler')->enable();
129-
}
130-
131-
return parent::doRequest($request);
132-
}
133-
134-
/**
135-
* {@inheritdoc}
136-
*
137-
* @param Request $request A Request instance
138-
*
139-
* @return Response A Response instance
140-
*/
141-
protected function doRequestInProcess($request)
142-
{
143-
$response = parent::doRequestInProcess($request);
144-
145-
$this->profiler = false;
146-
147-
return $response;
148-
}
149-
150-
/**
151-
* Returns the script to execute when the request must be insulated.
152-
*
153-
* It assumes that the autoloader is named 'autoload.php' and that it is
154-
* stored in the same directory as the kernel (this is the case for the
155-
* Symfony Standard Edition). If this is not your case, create your own
156-
* client and override this method.
157-
*
158-
* @param Request $request A Request instance
159-
*
160-
* @return string The script content
161-
*/
162-
protected function getScript($request)
163-
{
164-
$kernel = var_export(serialize($this->kernel), true);
165-
$request = var_export(serialize($request), true);
166-
$errorReporting = error_reporting();
167-
168-
$requires = '';
169-
foreach (get_declared_classes() as $class) {
170-
if (0 === strpos($class, 'ComposerAutoloaderInit')) {
171-
$r = new \ReflectionClass($class);
172-
$file = \dirname(\dirname($r->getFileName())).'/autoload.php';
173-
if (file_exists($file)) {
174-
$requires .= 'require_once '.var_export($file, true).";\n";
175-
}
176-
}
177-
}
178-
179-
if (!$requires) {
180-
throw new \RuntimeException('Composer autoloader not found.');
181-
}
182-
183-
$requires .= 'require_once '.var_export((new \ReflectionObject($this->kernel))->getFileName(), true).";\n";
184-
185-
$profilerCode = '';
186-
if ($this->profiler) {
187-
$profilerCode = '$kernel->getContainer()->get(\'profiler\')->enable();';
188-
}
189-
190-
$code = <<<EOF
191-
<?php
192-
193-
error_reporting($errorReporting);
194-
195-
$requires
196-
197-
\$kernel = unserialize($kernel);
198-
\$kernel->boot();
199-
$profilerCode
200-
201-
\$request = unserialize($request);
202-
EOF;
203-
204-
return $code.$this->getHandleScript();
205-
}
20621
}

0 commit comments

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