如何在Yii2中启用gzip压缩

5
如何在Yii2中启用gzip压缩?
我尝试在web/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();

我认为这个与这个重复了:https://dev59.com/6mTWa4cB1Zd3GeqPG9L8 - Yavor Ivanov
那个是针对之前的版本 Yii 1.x 的,不适用于 Yii 2.x。 - Harris
2个回答

7

不确定这是否是最佳实践,但我通过在 yii\web\Response 上附加事件处理程序使其工作。

$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();

3
更好的想法是,您可以在任何地方使用它(例如在控制器或操作中):
\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();
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接