在Laravel 4中,我想默认将配置变量"debug"设置为"false",但对于来自我自己的IP地址的请求设置为"true"(测试最终会比这更复杂)。
根据 http://four.laravel.com/docs/configuration 的文档,我尝试了以下方法:
配置/应用程序.php:
'debug' => false
filters.app - App::before(我也尝试将代码放在路由.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"正在显示,这似乎是一个请求。
有没有更好的地方来放置我的代码,或者我正在做的事情实际上是不可能的?
这似乎是你可以用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';
}
});
我还没有测试过它,但它应该可以工作。希望对您有所帮助!
在深入研究异常处理程序之后,我发现这是可靠的:
Config::set('app.debug', true);
app()->startExceptionHandling();
为什么采用这种方法?因为Laravel在启动时绑定了异常处理程序(以避免PHP内部破坏东西),所以你需要伪造该部分的重新启动。
附言。我正在恢复这个老问题,因为我认为公认的答案是不准确的。它不允许你在运行时启用调试,我无法通过查看系统变量来检测用户是否是员工。