Jelajahi Sumber

Refactored header creation to use $key => $value pairs for easier support for 3rd-party Response objects

Eric Clemmons 14 tahun lalu
induk
melakukan
275084d5d7

+ 19 - 24
src/Monolog/Handler/FirePHPHandler.php

@@ -55,14 +55,14 @@ class FirePHPHandler extends AbstractHandler
     /**
      * Function, Method or Closure for sending the header
      */
-    private $writer = 'header';
+    private $writer;
 
     /**
      * @param integer $level  The minimum logging level at which this handler will be triggered
      * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
      * @param mixed   $writer Function, Method or Closure to use for sending headers
      */
-    public function __construct($level = Logger::DEBUG, $bubble = false, $writer = 'header')
+    public function __construct($level = Logger::DEBUG, $bubble = false, $writer = null)
     {
         $this->level = $level;
         $this->bubble = $bubble;
@@ -78,12 +78,9 @@ class FirePHPHandler extends AbstractHandler
      */
     protected function createHeader(Array $meta, $message)
     {
-        return sprintf(
-            '%s-%s: %s',
-            $this->prefix,
-            join('-', $meta),
-            $message
-        );
+        $header = sprintf('%s-%s', $this->prefix, join('-', $meta));
+        
+        return array($header => $message);
     }
 
     /**
@@ -117,10 +114,10 @@ class FirePHPHandler extends AbstractHandler
     protected function getInitHeaders()
     {
         // Initial payload consists of required headers for Wildfire
-        return array(
+        return array_merge(
             $this->createHeader(array('Protocol', 1), self::PROTOCOL_URI),
             $this->createHeader(array(1, 'Structure', 1), self::STRUCTURE_URI),
-            $this->createHeader(array(1, 'Plugin', 1), self::PLUGIN_URI),
+            $this->createHeader(array(1, 'Plugin', 1), self::PLUGIN_URI)
         );
     }
 
@@ -128,23 +125,20 @@ class FirePHPHandler extends AbstractHandler
      * Send header string to the client
      *
      * @var String $header
+     * @var String $content
      * @return Boolean False if headers are already sent, true if header are sent successfully
      */
-    protected function sendHeader($header)
+    protected function sendHeader($header, $content)
     {
         if (headers_sent()) {
             return false;
+        } else if ($writer = $this->getWriter()) {
+                call_user_func_array($writer, array($header, $content));
         } else {
-            $writer = $this->getWriter();
-            
-            if ($writer instanceof \Closure) {
-                $writer($header);
-            } else {
-                call_user_func($writer, $header);
-            }
-            
-            return true;
+            header(sprintf('%s: %s', $header, $content));
         }
+        
+        return true;
     }
 
     /**
@@ -158,15 +152,16 @@ class FirePHPHandler extends AbstractHandler
     {
         // WildFire-specific headers must be sent prior to any messages
         if (! $this->initialized) {
-            foreach ($this->getInitHeaders() as $header) {
-                $this->sendHeader($header);
+            foreach ($this->getInitHeaders() as $header => $content) {
+                $this->sendHeader($header, $content);
             }
             
             $this->initialized = true;
         }
         
-        $header = $this->createRecordHeader($record);
-        $this->sendHeader($header);
+        foreach ($this->createRecordHeader($record) as $header => $content) {
+            $this->sendHeader($header, $content);
+        }
     }
 
     /**

+ 12 - 11
tests/Monolog/Handler/FirePHPHandlerTest.php

@@ -28,9 +28,9 @@ class FirePHPHandlerTest extends TestCase
     /**
      * @dataProvider handlerProvider
      */
-    public function testDefaultWriterIsClosure($handler)
+    public function testDefaultWriterIsNull($handler)
     {
-        $this->assertEquals('header', $handler->getWriter());
+        $this->assertEquals(null, $handler->getWriter());
     }
 
     public function testConstructWithWriter()
@@ -62,16 +62,17 @@ class FirePHPHandlerTest extends TestCase
         $handler->handle($this->getRecord(Logger::DEBUG));
     }
 
-    public function writerForTestMethodWriter($header)
+    public function writerForTestMethodWriter($header, $content)
     {
         $valid = array(
-            'X-Wf-Protocol-1: http://meta.wildfirehq.org/Protocol/JsonStream/0.2',
-            'X-Wf-1-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1',
-            'X-Wf-1-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/ZendFramework/FirePHP/1.6.2',
-            'X-Wf-1-1-1-5: 50|[{"Type":"LOG","File":"","Line":""},"test: test "]|',
+            'X-Wf-Protocol-1'    => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2',
+            'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1',
+            'X-Wf-1-Plugin-1'    => 'http://meta.firephp.org/Wildfire/Plugin/ZendFramework/FirePHP/1.6.2',
+            'X-Wf-1-1-1-5'       => '50|[{"Type":"LOG","File":"","Line":""},"test: test "]|',
         );
         
-        $this->assertTrue(in_array($header, $valid));
+        $this->assertTrue(array_key_exists($header, $valid));
+        $this->assertEquals($valid[$header], $content);
     }
 
     public function testClosureWriter()
@@ -79,14 +80,14 @@ class FirePHPHandlerTest extends TestCase
         $headers = array();
         
         $handler = new FirePHPHandler;
-        $handler->setWriter(function($header) use (&$headers) {
-            $headers[] = $header;
+        $handler->setWriter(function($header, $content) use (&$headers) {
+            $headers[$header] = $content;
         });
         
         $handler->handle($this->getRecord(Logger::DEBUG));
         
         $this->assertEquals(
-            'X-Wf-1-1-1-5: 50|[{"Type":"LOG","File":"","Line":""},"test: test "]|',
+            '50|[{"Type":"LOG","File":"","Line":""},"test: test "]|',
             end($headers)
         );