我在使用 Yii-Bootstrap extension 時遇到了個大問題,因爲預加載機制使全部的 AJAX 請求都會初始化 bootstrap。這是資源的極大浪費,尤爲是使用基於 AJAX 的文件上傳工具拆分大文件上傳時,會初始化 bootstrap 上百次。php
我最終是禁用了預加載而使用過濾器來加載bootstrapajax
禁用 bootstrap 預加載: /protect/config/main.phpbootstrap
'preload'=>array( //'bootstrap', 'log' ),
建立文件: /protected/extensions/bootstrap/filters/BootstrapFilter.phpapp
<?php class BootstrapFilter extends CFilter { protected function preFilter() { Yii::app()->getComponent("bootstrap"); return true; } }
而後在控制器中,新增 bootstrap 過濾器yii
public function filters() { return array( 'accessControl', 'postOnly + delete', array('ext.bootstrap.filters.BootstrapFilter - delete') ); }
這樣將會在除了 "delete" 動做的其餘動做中加載 bootstrap,若是你須要對其餘指定的動做禁用加載 bootstrap,使用下面的代碼:工具
array('ext.bootstrap.filters.BootstrapFilter - delete, uploadajax')
確保你在站點的全部控制器中添加此過濾器(包括顯示錯誤信息的控制器)post
這個方法能夠很容易的被添加到 Gii CRUD 生成器中,在我看來這是個更好的初始化此擴展的方法。code