如何在指定的動作中加載 Yii-bootstrap 擴展

我在使用 Yii-Bootstrap extension 時遇到了個大問題,由於預加載機制使所有的 AJAX 請求都會初始化 bootstrap。這是資源的極大浪費,尤其是使用基於 AJAX 的文件上傳工具拆分大文件上傳時,會初始化 bootstrap 上百次。

我最終是禁用了預加載而使用過濾器來加載bootstrap

禁用 bootstrap 預加載: /protect/config/main.php

[php]
'preload'=>array(
   //'bootstrap',
   'log'
),

創建文件: /protected/extensions/bootstrap/filters/BootstrapFilter.php

[php]
<?php
class BootstrapFilter extends CFilter
{
    protected function preFilter()
    {
        Yii::app()->getComponent("bootstrap");
        return true;
    }
}

然後在控制器中,新增 bootstrap 過濾器

[php]
public function filters()
{
    return array(
        'accessControl',
        'postOnly + delete',
        array('ext.bootstrap.filters.BootstrapFilter - delete')
    );
}

這樣將會在除了 "delete" 動作的其他動作中加載 bootstrap,如果你需要對其他指定的動作禁用加載 bootstrap,使用下面的代碼:

[php]
array('ext.bootstrap.filters.BootstrapFilter - delete, uploadajax')

確保你在站點的所有控制器中添加此過濾器(包括顯示錯誤信息的控制器)

這個方法可以很容易的被添加到 Gii CRUD 生成器中,在我看來這是個更好的初始化此擴展的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章