diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index cc366186fc0f8..050d8318c19e8 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -52,6 +52,8 @@ public function collect(Request $request, Response $response, \Exception $except foreach ($request->attributes->all() as $key => $value) { if ('_route' === $key && is_object($value)) { $value = $value->getPath(); + } elseif (is_object($value)) { + $value = $this->varToString($value); } $attributes[$key] = $value; diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php index bb80781ebeb56..240d9e931e71c 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php @@ -144,6 +144,22 @@ function () { return 'foo'; }, } } + /** + * Test data collector serialisation. + * + * @dataProvider provider + */ + public function testDataCollectorSerialization(Request $request, Response $response) + { + if (class_exists('Symfony\Component\HttpFoundation\Session\Session') && class_exists('PDO')) { + $c = new RequestDataCollector(); + $c->collect($request, $response); + $this->assertContains('"Object(Symfony\Component\HttpFoundation\Session\Session)"', $c->serialize()); + } else { + $this->markTestSkipped('"Symfony\Component\HttpFoundation\Session\Session" or "PDO" class does not exists'); + } + } + public function provider() { if (!class_exists('Symfony\Component\HttpFoundation\Request')) { @@ -155,6 +171,15 @@ public function provider() $request->attributes->set('_route', 'foobar'); $request->attributes->set('_route_params', array('name' => 'foo')); + if (class_exists('Symfony\Component\HttpFoundation\Session\Session') && class_exists('PDO')) { + $pdo = new \PDO("sqlite::memory:"); + $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + $handler = new \Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler($pdo, array('db_table' => 'sessions')); + $bridge = new \Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage($handler); + $session = new \Symfony\Component\HttpFoundation\Session\Session($bridge); + $request->attributes->set('session', $session); + } + $response = new Response(); $response->setStatusCode(200); $response->headers->set('Content-Type', 'application/json');