2015-07-20 120 views
3

如何在Yii2中启用gzip压缩?如何在Yii2中启用gzip压缩

我试图在网络/ index.php中使用下面的代码,但它返回空

$application = new yii\web\Application($config); 
$application->on(yii\web\Application::EVENT_BEFORE_REQUEST, function($event){ 
    ob_start("ob_gzhandler"); 
}); 
$application->on(yii\web\Application::EVENT_AFTER_REQUEST, function($event){ 
    ob_end_flush(); 
}); 
$application->run(); 
+0

我认为这是一个与这一个重复:http://stackoverflow.com/questions/10975908/yii-compress-your-application-output-using-gzip –

+0

,一个是以前的版本Yii 1.x,它不适用于Yii 2.X – Harris

回答

4

不知道这是最好的做法,但我把它通过对警予附加事件处理工作\网络\响应

$application = new yii\web\Application($config); 
$application->on(yii\web\Application::EVENT_BEFORE_REQUEST, function(yii\base\Event $event){ 
    $event->sender->response->on(yii\web\Response::EVENT_BEFORE_SEND, function($e){ 
     ob_start("ob_gzhandler"); 
    }); 
    $event->sender->response->on(yii\web\Response::EVENT_AFTER_SEND, function($e){ 
     ob_end_flush(); 
    }); 
}); 
$application->run(); 
1

它是更好的主意,你可以在任何地方(在控制器或动作等)使用它:

\yii\base\Event::on(
    \yii\web\Response::className(), 
    \yii\web\Response::EVENT_BEFORE_SEND, 
    function ($event) { 
     ob_start("ob_gzhandler"); 
    } 
); 

\yii\base\Event::on(
    \yii\web\Response::className(), 
    \yii\web\Response::EVENT_AFTER_SEND, 
    function ($event) { 
     ob_end_flush(); 
    } 
);