瀏覽代碼

[DoctrineBridge] Fixed attempt to serialize non-serializable values

Arnout Boks 13 年之前
父節點
當前提交
4535abecee
共有 1 個文件被更改,包括 37 次插入1 次删除
  1. 37 1
      src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php

+ 37 - 1
src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php

@@ -41,7 +41,7 @@ class DoctrineDataCollector extends DataCollector
     public function collect(Request $request, Response $response, \Exception $exception = null)
     {
         $this->data = array(
-            'queries'     => null !== $this->logger ? $this->logger->queries : array(),
+            'queries'     => null !== $this->logger ? $this->sanitizeQueries($this->logger->queries) : array(),
             'connections' => $this->connections,
             'managers'    => $this->managers,
         );
@@ -85,4 +85,40 @@ class DoctrineDataCollector extends DataCollector
         return 'db';
     }
 
+    private function sanitizeQueries($queries)
+    {
+        foreach ($queries as $i => $query) {
+            foreach ($query['params'] as $j => $param) {
+                $queries[$i]['params'][$j] = $this->sanitizeParameter($param);
+            }
+        }
+
+        return $queries;
+    }
+
+    private function sanitizeParameter($param)
+    {
+        if (is_array($param)) {
+            foreach ($param as $key => $value) {
+                $param[$key] = $this->sanitizeParameter($value);
+            }
+
+            return $param;
+        }
+
+        if (is_resource($param)) {
+            return sprintf('Resource(%s)', get_resource_type($param));
+        }
+
+        if (is_object($param) && $this->isNotSerializable($param)) {
+            return sprintf('Object(%s)', get_class($param));
+        }
+
+        return $param;
+    }
+
+    private function isNotSerializable($object)
+    {
+        return $object instanceof \SplFileInfo;
+    }
 }