gpt4 book ai didi

php - 在 symfony 中以交互方式启用 Debug模式

转载 作者:可可西里 更新时间:2023-11-01 12:22:08 25 4
gpt4 key购买 nike

我正在使用 symfony 1.4 和 Doctrine。

我正在尝试找到一种方法,仅当当前 sfUser 具有特殊的 debugger 凭据时才启用 Debug模式。

我已经创建了一个过滤器,如果 sfUser 没有这个凭证(web_debug 设置为 true我的 settings.yml 文件):

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 模式在我的 index.php 中被硬编码为 false,调试器也禁用了它;因此 Web 调试栏不显示 Doctrine 语句或时间指示。

有没有办法只有在当前 sfUser 有精确的凭据时才启用 Debug模式?

我尝试将 sfConfig::set('sf_debug', true); 添加到我的 checkWebDebugFilter::execute() 方法中,但是随着过滤器的执行 学说陈述之后,它们没有被记录下来。

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

预先感谢您的回答。

最佳答案

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

调试参数存储在此类的 protected 变量中,因此您无法通过过滤器更改它,但您可以创建一个函数,例如:

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

然后在你的过滤器中调用它:

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

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

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

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

我还没有测试过这个,但我会这样做。

关于php - 在 symfony 中以交互方式启用 Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com