在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”正在显示,所以看起来这只是一个请求。
是否有更好的地方放置我的代码,或者我实际上不可能实现?
答案 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是准确的。它不允许你在运行时启用调试,我无法通过查看系统变量来检测用户是否是员工。