我在使用 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 生成器中,在我看來這是個更好的初始化此擴展的方法。