繁体   English   中英

CakePHP中的条件组件加载

[英]Conditional Component Loading in CakePHP

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

我知道我可以使用debug config值将其关闭,但是我想将两个服务器的该值都保持为1。

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

我觉得我想念一些东西,但看不到树木茂密的森林。 提前致谢!

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

在您的app_controller中

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

如果您在任何一个或单个控制器中都具有_ 构造函数,请记住包括parent :: _construct();。 否则,您将“打破链条”。

希望这可以帮助

我认为DebugKit的基本目的与处于调试模式有关,因此我可以理解,这些工具无法在不禁用调试模式的情况下提供禁用功能。

就是说,如果您绝对必须这样做,那么我认为您最好的选择是直接修改app/plugins/debugkit/controllers/components/toolbar.php ,补充app/plugins/debugkit/controllers/components/toolbar.php ToolbarComponent::initialize现有的调试模式检查,并针对您的检查不变。

(对于它的价值,我认为您最好关闭生产服务器上的调试模式,并使用记录在/app/tmp/logs/error.log错误/警告来确定在测试过程中出现的问题)

首先,感谢亚当·吉尔斯的出色回答。 我没想到要看__construct()回调。 那可能是比我发现的更好的方法。 向丹尼尔·赖特(Daniel Wright)指出,先生。 我可能很快将生产服务器更改为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) );

到目前为止,这似乎工作得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM