在symfony中以交互方式启用调试模式

时间:2011-03-11 17:42:05

标签: php debugging symfony1

我正在使用带有Doctrine的symfony 1.4。

我正在尝试仅在当前sfUser具有特殊debugger凭据的情况下才能启用调试模式。

如果sfUser没有此凭据(我的web_debug文件中true设置为settings.yml),我已经创建了一个停用symfony调试栏的过滤器:

class checkWebDebugFilter extends sfFilter
{
  public function execute($filterChain)
  {
    if(!$this->getContext()->getUser()->hasCredential('debugger'))
    {
      sfConfig::set('sf_web_debug', false);
    }

    $filterChain->execute();
  }
}

我的index.php文件的代码是:

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false));
sfContext::createInstance($configuration)->dispatch();

问题是,由于debug模式在我的false中被硬编码为index.php,因此调试器也会禁用它;因此,Web调试栏不显示Doctrine语句,也不显示时序指示。

只有当前sfUser具有精确凭据时才能启用调试模式吗?

我尝试将sfConfig::set('sf_debug', true);添加到我的checkWebDebugFilter::execute()方法中,但由于在 Doctrine语句之后执行了过滤器,因此不会记录它们。

我还尝试在session_start();文件中添加index.php,然后浏览$_SESSION变量以检查当前用户是否拥有debugger凭据,但是不工作(也不符合symfony的精神)。

提前感谢您的回答。

2 个答案:

答案 0 :(得分:1)

当您在index.php文件中传递debug参数时,它实际上会传递给应用程序的sfApplicationConfiguration类。在您的情况下,可以在 /apps/frontend/config/frontendConfiguration.class.php 文件中找到它。 frontendConfiguration类扩展了sfApplicationConfiguration,在这里你可以添加你的代码。

Debug参数存储在此类的受保护变量中,因此您无法从过滤器更改它,但您可以创建一个函数,例如:

setDebug($mode) {
   $this->debug = $mode;
} 

并在过滤器中调用它:

$this->context->getConfiguration()->setDebug(true);

您还可以覆盖frontendConfiguration类中的isDebug()函数,因为它在initConfiguration()函数中用于初始化时序指示器和其他调试内容。

if ($this->isDebug() && !sfWebDebugPanelTimer::isStarted())
{
    sfWebDebugPanelTimer::startTime();
}

但是你不能在这里检查用户权限,因为sfUser类还没有在这个阶段初始化。但您可以检查$ _COOKIES或$ _SESSION全局变量,以获取用户登录时可以设置的值。或者您可以在Filter中调用sfWebDebugPanelTimer :: startTime(),但会错过几微秒。

我没有测试过这个,但我就是这样做的。

答案 1 :(得分:-1)

试试这个

如果要启用web_debug面板(开发)模式,那么

http://host_url/frontend_dev.php

写下你的index.php'frontend','dev',true。

require_once(目录名(文件) '/ .. /配置/ ProjectConfiguration.class.php'); $ configuration = ProjectConfiguration :: getApplicationConfiguration('frontend','dev',true)); sfContext ::的createInstance($配置) - >调度();