Browse Source

Update AssetFilter to use response methods.

Instead of directly outputting to the server, using the response object
will make AssetFilter more compatible with applications that straddling
PSR7 and dispatcher stacks.

Refs #9260
Mark Story 9 years ago
parent
commit
a11ab397f8

+ 3 - 8
src/Routing/Filter/AssetFilter.php

@@ -87,9 +87,7 @@ class AssetFilter extends DispatcherFilter
 
 
         $pathSegments = explode('.', $url);
         $pathSegments = explode('.', $url);
         $ext = array_pop($pathSegments);
         $ext = array_pop($pathSegments);
-        $this->_deliverAsset($request, $response, $assetFile, $ext);
-
-        return $response;
+        return $this->_deliverAsset($request, $response, $assetFile, $ext);
     }
     }
 
 
     /**
     /**
@@ -142,10 +140,7 @@ class AssetFilter extends DispatcherFilter
             $response->header('Content-Length', filesize($assetFile));
             $response->header('Content-Length', filesize($assetFile));
         }
         }
         $response->cache(filemtime($assetFile), $this->_cacheTime);
         $response->cache(filemtime($assetFile), $this->_cacheTime);
-        $response->sendHeaders();
-        readfile($assetFile);
-        if ($compressionEnabled) {
-            ob_end_flush();
-        }
+        $response->file($assetFile);
+        return $response;
     }
     }
 }
 }

+ 3 - 5
tests/TestCase/Routing/Filter/AssetFilterTest.php

@@ -245,14 +245,12 @@ class AssetFilterTest extends TestCase
         $request = new Request($url);
         $request = new Request($url);
         $event = new Event('Dispatcher.beforeDispatch', $this, compact('request', 'response'));
         $event = new Event('Dispatcher.beforeDispatch', $this, compact('request', 'response'));
 
 
-        ob_start();
-        $filter->beforeDispatch($event);
-        $result = ob_get_contents();
-        ob_end_clean();
+        $response = $filter->beforeDispatch($event);
+        $result = $response->getFile();
 
 
         $path = TEST_APP . str_replace('/', DS, $file);
         $path = TEST_APP . str_replace('/', DS, $file);
         $file = file_get_contents($path);
         $file = file_get_contents($path);
-        $this->assertEquals($file, $result);
+        $this->assertEquals($file, $result->read());
 
 
         $expected = filesize($path);
         $expected = filesize($path);
         $headers = $response->header();
         $headers = $response->header();