如果没有预加载,Yii Bootstrap不起作用

时间:2012-07-23 12:07:22

标签: php yii twitter-bootstrap yii-extensions

我在应用程序中使用Yii Bootstrap已有一段时间了。现在,我有一个部分,其中加载的CSS文件导致问题,我不想在该控制器中加载引导程序扩展。

在我的配置文件中,我将bootstrap设置为preload:

'preload' => array('log', 'bootstrap')

我现在已从preload数组中删除了bootstrap,它停止工作说别名不正确:

  

别名“bootstrap.widgets.BootNavbar”无效。确保它指向现有目录或文件。

别名虽然已在配置文件的components部分中定义,但在预加载引导程序组件时工作正常:

'bootstrap' => array(
    'class' => 'ext.bootstrap.components.Bootstrap'
 ),

如果没有预加载引导程序扩展,我该怎么办?

3 个答案:

答案 0 :(得分:13)

请致电:

Yii::app()->getComponent("bootstrap");

'preload' => 'bootstrap'实际上会对此命令进行操纵。如果您按照Blizz的建议拨打Yii::app()->bootstrap->init(),则最终会拨打init()两次,这可能会有害。

答案 1 :(得分:4)

我以这种方式在模块init()方法中创建了bootstrap扩展。不需要预加载。

 if (!Yii::app()->hasComponent('bootstrap')) {
            Yii::setPathOfAlias('bootstrap', realpath(dirname(__FILE__) . '/extensions/bootstrap'));
            Yii::createComponent('bootstrap.components.Bootstrap')->init();
        }

如果您想在Yii :: app()下管理Bootstrap组件(例如hasComponent方法),您可以更改最后一行:

Yii::app()->setComponent('bootstrap',Yii::createComponent('bootstrap.components.Bootstrap'));

此解决方案不需要preload或init(),但您必须手动将别名设置为Boostrap文件夹。

答案 2 :(得分:2)

您可以随时导入它:

Yii::import('ext.bootstrap.components.Bootstrap');