CakePHP中的条件组件加载

时间:2010-10-22 17:14:11

标签: php cakephp cakephp-1.3

我在我的项目中使用DebugKit组件,但是我只想在登台服务器上打开它,并且在从生产服务器运行时不加载它。

我知道我可以使用调试配置值将其关闭,但我想将这两个服务器的值保持为1。

我尝试在bootstrap.php中有条件地定义一个常量'DEBUG_KIT'作为组件名称(即'DebugKit.Toolbar')或null。然后在app_controller文件顶部的var $组件定义中使用该常量。好吧,Cake不喜欢组件数组和barfs中的null。也不喜欢空字符串。

我觉得我错过了一些东西,却看不到森林里的树木。提前致谢!

3 个答案:

答案 0 :(得分:3)

我在我的应用程序中执行类似操作:我将使用__construct方法检测存在DEBUG_KIT并将其添加到$ components数组中。在处理$ components数组之前调用此函数,因此您可以透明地添加/删除组件。

在你的app_controller

function __construct(){
  if(DEBUG_KIT){
    $this->components[] = 'DebugKit.Toolbar'
  }
  parent::__construct();
}

如果您在任何或您的个人控制器中都有_ 构造函数,请记住包括parent :: _construct();否则你会'打破链条'。

希望这有帮助

答案 1 :(得分:2)

我认为DebugKit的根本目的与处于调试模式有关,因此我可以理解这些工具不提供禁用容量而不禁用调试模式。

那就是说,如果你绝对必须这样做,我认为最好的办法就是直接修改app/plugins/debugkit/controllers/components/toolbar.php,补充ToolbarComponent::initialize中现有的调试模式检查,并检查你的常量。

(对于它的价值,我认为你最好在生产服务器上关闭调试模式,并使用/app/tmp/logs/error.log中记录的错误/警告来识别已经通过测试的问题。)

答案 2 :(得分:2)

首先,感谢Adam Giles的回答。我没想过要查看__construct()回调。这可能是比我发现的更好的方式。对丹尼尔赖特来说,先生。我可能很快就会将生产服务器更改为0调试并开始查看错误日志。

在发布此问题后不久我找到了自己的答案。 DebugKit有一个'autoRun'参数,可以打开和关闭它。所以,我首先在bootstrap.php中设置一个全局常量,如下所示:

define( 'IS_DEV', ($_SERVER['SERVER_NAME'] == 'staging.example.com') );

然后在app_controller.php中,我用它在$ components语句中设置'autoRun'参数。

var $components = array( 'DebugKit.Toolbar'=>array('autoRun'=>IS_DEV) );

到目前为止,这似乎运作良好。