我在我的项目中使用DebugKit组件,但是我只想在登台服务器上打开它,并且在从生产服务器运行时不加载它。
我知道我可以使用调试配置值将其关闭,但我想将这两个服务器的值保持为1。
我尝试在bootstrap.php中有条件地定义一个常量'DEBUG_KIT'作为组件名称(即'DebugKit.Toolbar')或null。然后在app_controller文件顶部的var $组件定义中使用该常量。好吧,Cake不喜欢组件数组和barfs中的null。也不喜欢空字符串。
我觉得我错过了一些东西,却看不到森林里的树木。提前致谢!
答案 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) );
到目前为止,这似乎运作良好。