我目前在 PHP 5.4.4 上使用 Zend Framework 2 beta 来开发个人 web 应用程序以用于自学目的。
我想知道是否可以在将 html 输出发送到浏览器之前拦截它,以便通过删除所有不必要的空格来缩小它。
我怎样才能在 ZF2 中实现这个结果?
我目前在 PHP 5.4.4 上使用 Zend Framework 2 beta 来开发个人 web 应用程序以用于自学目的。
我想知道是否可以在将 html 输出发送到浏览器之前拦截它,以便通过删除所有不必要的空格来缩小它。
我怎样才能在 ZF2 中实现这个结果?
是的,您可以:
在 Modle.php 上创建一个将在完成时触发的事件
public function onBootstrap(Event $e)
{
$app = $e->getTarget();
$app->getEventManager()->attach('finish', array($this, 'doSomething'), 100);
}
public function doSomething ($e)
{
$response = $e->getResponse();
$content = $response->getBody();
// do stuff here
$response->setContent($content);
}
只需将这两个方法放在任何 module.php 中即可。它将 gzip 并将压缩后的内容发送到浏览器。
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach("finish", array($this, "compressOutput"), 100);
}
public function compressOutput($e)
{
$response = $e->getResponse();
$content = $response->getBody();
$content = preg_replace(array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s', '#(?://)?<![CDATA[(.*?)(?://)?]]>#s'), array('>', '<', '\\1', "//<![CDATA[n" . '1' . "n//]]>"), $content);
if (@strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
header('Content-Encoding: gzip');
$content = gzencode($content, 9);
}
$response->setContent($content);
}