7

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

在我的配置文件中,我将引导程序设置为预加载:

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

我现在已经从预加载数组中删除了引导程序,并且它停止工作,说别名不正确:

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

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

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

我可以做些什么来使引导扩展工作而不预加载它?

4

3 回答 3

13

只需调用这个:

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

'preload' => 'bootstrap'实际上触发了这个命令。如果你只是Yii::app()->bootstrap->init()按照 Blizz 的建议打电话,你最终会打电话init()两次,这可能是有害的。

于 2012-09-22T20:37:09.213 回答
4

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

 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'));

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

于 2012-11-09T07:25:52.207 回答
2

您可以随时导入它:

Yii::import('ext.bootstrap.components.Bootstrap');
于 2012-07-23T15:49:32.003 回答