1

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

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

配置/app.php:

'debug' => false

filters.app - App::before (我也试过把代码放在 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”正在显示,所以这似乎是一个请求。

有没有更好的地方来放置我的代码,或者我正在做的事情实际上是不可能的?

4

2 回答 2

4

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

使用环境,你决定一个名字——你可以叫你的debugging——然后你把那个环境的配置文件放在你的配置目录的子目录中。因此,在您上面给出的情况下,您可以将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';
    }
});

我还没有测试过,但它应该可以工作。希望有帮助!

于 2013-10-06T02:25:44.210 回答
2

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

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

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

PS。我正在重新提出这个老问题,因为我认为公认的答案不准确。它不允许您在运行时启用调试,并且我无法通过查看系统变量来检测用户是否是员工。

于 2015-12-10T17:45:21.240 回答