首页 > 解决方案 > 如何动态启用 Laravel Debugbar?

问题描述

如何在运行时启用 Laravel 调试栏?我想基于会话变量启用它。在我的AppServiceProvider我添加:

\Debugbar::enable()

但它不起作用。如果我将其设置env APP_DEBUGtrue它可以工作,那么调试栏一切正常(我已经成功使用了一段时间),但似乎无法在运行时打开/关闭它?我在 Laravel 5.4 上。我希望在我的生产环境中默认关闭它,但可以选择以管理员/开发者身份打开它。

我确实看到了这个答案: 动态隐藏 Laravel barryvdh 调试栏

但是,我希望它默认禁用并在需要时启用它,而不是相反。这是因为性能,根据调试栏的文档:

注意。一旦启用,就会添加收集器(并且可能会产生额外的开销),因此如果您想在生产中使用调试栏,请在配置中禁用并仅在需要时启用。

谢谢!

标签: laraveldebugging

解决方案


调试栏需要捕获应用程序中发生的所有事情,为了实现这一点,它必须在应用程序中几乎所有其他事情发生之前运行。

例如,如果您能够为管理员打开它,则应用程序需要完全启动,获取您的身份验证断言,检查数据库,然后查看您是管理员,然后才知道您希望调试器正在运行。

您可以做的最好的事情是启动第二个具有不同 ENV 变量的环境。如果你愿意,你甚至可以让它访问同一个生产数据库,但它需要是一个单独的 App 实例。一般来说,无论如何,这是一个更好的工作流程,有一个与生产相同的暂存环境。这里的一个小的安全考虑是,任何在您的生产实例中拥有帐户的用户,如果它在公共网络上,也可以登录。因此,您需要通过 .htaccess 使用密码来保护它,或者可能只为访问服务器设置一个 IP 白名单,这样它就不仅仅是坐在那里了。调试为怀有恶意的人提供了大量有用的信息。


推荐阅读