设置debug =>时出现问题在Laravel 4中运行时为true

时间:2013-10-06 01:41:31

标签: php laravel laravel-4

在Laravel 4中,我希望默认情况下将配置变量“debug”设置为“false”,但是对于来自我自己的IP地址的请求,将其设置为“true”(测试最终会比这更复杂)。

根据http://four.laravel.com/docs/configuration的文档,我尝试了以下内容:

config / app.php:

'debug' => false

filters.app - App ::之前(我也尝试将代码放在routes.php的顶部,效果相同):

if(Request::getClientIp() == '[my ip address]') {
  echo 'hello world';
  Config::set('app.debug', true);
}
echo Config::get('app.debug');

当我访问一个错误的URL时,我看到“hello world”和“1”,这样很好,但只有公共(非调试)错误消息显示在下面。

我理解在运行时设置的配置变量仅适用于单个请求,但由于我的“hello world”正在显示,所以看起来这只是一个请求。

是否有更好的地方放置我的代码,或者我实际上不可能实现?

2 个答案:

答案 0 :(得分:4)

这似乎是您可以通过Laravel的环境检测(从您链接的页面http://four.laravel.com/docs/configuration#environment-configuration)完成的事情。

使用环境,您决定一个名称 - 您可以调用您的debugging - 然后将该环境的配置文件放在config目录的子目录中。因此,在上面给出的情况下,您将app.php配置文件复制到/app/config/debugging/app.php(以及您想要的任何其他文件),并进行必要的配置更改。

然后重要的一步是检测环境,以便您的应用程序使用debugging配置文件。这在/bootstrap/start.php中指定。您可以将闭包而不是数组传递给Laravel的环境检测,并返回您要使用的环境名称,这样您就可以像上面那样使用上面的方法:

$env = $app->detectEnvironment(function()
{
    if ($_SERVER['REMOTE_ADDR'] === '[my ip address]') {
        return 'debugging';
    }
});

我没有测试过,但它应该可行。希望有所帮助!

答案 1 :(得分:1)

在深入研究异常处理程序后我发现这是可靠的:

  Config::set('app.debug', true);
  app()->startExceptionHandling();

为什么这种做法?因为Laravel在启动时绑定异常处理程序(为了避免PHP内部破坏事物),你需要假装重新启动该部分。

PS。我正在复兴这个老问题,因为我不认为accepted answer是准确的。它不允许你在运行时启用调试,我无法通过查看系统变量来检测用户是否是员工。