【问题标题】:Conditional Component Loading in CakePHPCakePHP 中的条件组件加载
【发布时间】:2010-10-22 17:14:11
【问题描述】:

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

我知道我可以使用调试配置值将其关闭,但我希望两台服务器的该值都保持为 1。

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

我觉得我错过了一些东西,但不能只见树木不见森林。提前致谢!

【问题讨论】:

  • 您是否有理由需要将debug 保留在生产服务器上的1
  • 代码库还很年轻,我想确保我能看到任何可能通过测试服务器漏掉的错误。

标签: php cakephp cakephp-1.3


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我在我的应用程序中做了类似的事情:我会使用 __construct 方法来检测是否存在 DEBUG_KIT 并将其添加到 $components 数组中。这个函数在 $components 数组被处理之前被调用,所以你可以透明地添加/删除组件。

    在你的 app_controller 中

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

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

    希望对你有帮助

    【讨论】:

    • 如果服务器负载有问题,这种方法也避免了加载 DebugKit 然后通过 autoRun 将其关闭的开销
    【解决方案3】:

    首先,感谢 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) );
    

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

    【讨论】:

    • 这是否意味着任何人都可以通过简单地传递 url 参数 debug=1 来导致 DebugKit 显示?从源代码:“autoRun - 自动显示工具栏。如果设置为 false,可以通过将?debug=true 添加到您的 URL 来触发工具栏显示”。但是,这假设您仍然将生产服务器的调试值设置为 0 以上。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2021-05-26
    • 2013-08-15
    相关资源
    最近更新 更多