merged branch guilhermeblanco/patch-9 (PR #4949)
Commits
-------
1f33756
Update master
Discussion
----------
Allow HttpKernel ->render to be called directly
Hi,
I faced this problem in a funny situation.
Working on tests of individual components, I want to be able to test sub-requests. These elements are not mapped directly, relying on `FrameworkBundle` routing internal to achieve its goal.
The nature of my application leads to fully decoupled bundles, being a website responsible to define everything, from app configuration to routing elements. That way, an individual bundle controller don't know the route it should call, leading the test to be harder to do.
Together with this situation, it is also required in my testing scenario to be able to test the real world execution, then being an ESI include (a sub-request). This test then needs to be able to directly call controller to be rendered. That said, `HttpKernel` provides an API that does exactly what is required to achieve my goal, calling `render()` which triggers the sub-request and also accepts options which allows me to test the real world scenarios.
But as soon as you trigger the method, `ProfileListener` intercepts the kernel response to collect profiling information. Under this specific situation, since you called directly `render`, there's no master request, then leading the test to fail with the following PHP warning:
```
Warning: SplObjectStorage::offsetExists() expects parameter 1 to be object, boolean given in /var/www/nde/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php line 120
```
To fix that, all that is needed is a check for a possible parent request. That's the purpose of this patch. =)
---------------------------------------------------------------------------
by stof at 2012-07-17T15:11:13Z
This looks good to me, but as said on IRC, a test should be added to avoid regressions
This commit is contained in:
commit
ebea32c40d
@ -117,9 +117,12 @@ class ProfilerListener implements EventSubscriberInterface
|
|||||||
array_pop($this->requests);
|
array_pop($this->requests);
|
||||||
|
|
||||||
$parent = end($this->requests);
|
$parent = end($this->requests);
|
||||||
$profiles = isset($this->children[$parent]) ? $this->children[$parent] : array();
|
|
||||||
$profiles[] = $profile;
|
if ($parent) {
|
||||||
$this->children[$parent] = $profiles;
|
$profiles = isset($this->children[$parent]) ? $this->children[$parent] : array();
|
||||||
|
$profiles[] = $profile;
|
||||||
|
$this->children[$parent] = $profiles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($this->children[$request])) {
|
if (isset($this->children[$request])) {
|
||||||
|
Reference in New Issue
Block a user