我的分析器工具栏没有出现在 symfony 4.3.1 中

Posted

技术标签:

【中文标题】我的分析器工具栏没有出现在 symfony 4.3.1 中【英文标题】:My profiler toolbar isn't showing up in symfony 4.3.1 【发布时间】:2020-02-23 21:27:12 【问题描述】:

在我的 .env 文件中,我已将我的应用程序环境指定为 dev 和 debug,如下所示:

APP_ENV=dev
APP_DEBUG=true

在我的config/packages/dev/web_profiler.yaml 文件中,我有以下内容:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler:  only_exceptions: false 

config/routes/dev/web_profiler.yaml 内的路由好像没问题:

web_profiler_wdt:
    resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
    prefix: /_wdt

web_profiler_profiler:
    resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
    prefix: /_profiler

所以当我使用symfony server:start 运行服务器时,一切都很好,但分析器没有出现。我是否错过了在 Symfony 中启用该功能的某些功能?

为了澄清,该页面正在输出具有适当内容的适当 html 页面。只是没有显示分析器。


我的基本树枝模板:

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>% block title % % endblock %</title>
         encore_entry_script_tags('base') 
        <link rel="icon" type="image/x-icon" href=" asset('build/images/favicon.ico') " />
        <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,500|Playfair+Display:400,700&display=swap" rel="stylesheet">
         encore_entry_link_tags("base") 
        % block stylesheet %% endblock %
    </head>
    <body % if app.request.get('_route') == 'home' % class='homepage' % endif % >
        <header>
            <div id='top-navigation' class='padding-lg__left-md padding-lg__right-md padding-lg__top-sm padding-lg__bottom-sm row row__align-center row__justify-start'>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Our Mission</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Our Team</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Where the Money Goes</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Community Leadership</span>
                <span class='text-color__white text-size__small text-weight__bold'>Policies</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__left-auto icon-set'> <span class='icon size__small color__white margin-lg__right-xsm'> source('@public_path'~asset('build/images/icons/feedback.svg')) </span>Submit Feedback</span>
            </div>
            <nav class="padding-lg__top-md padding-lg__bottom-md padding-lg__left-md padding-lg__right-md row row__align-center row__justify-start % if app.request.get('_route') == 'home' % homepage % endif %">
                <div id='logo'>
                    <a href=" url('home') ">
                        <img src=" asset('build/images/logo_placeholder.png') " >
                    </a>
                </div>
                % if app.request.get('_route') == 'creator-register' %

                % else %
                    % if not is_granted('IS_AUTHENTICATED_FULLY') %
                        <div class='margin-lg__left-auto'>
                            <a href=" url('login') ">
                                <div class='icon-set'>
                                    <span class='icon margin-lg__right-xsm'>
                                         source('@public_path'~asset('build/images/icons/user.svg')) 
                                    </span>
                                    <span class='nav-item'>Login</span>
                                </div>
                            </a>
                        </div>
                    % endif %

                % endif %
            </nav>
        </header>
        % if app.request.get('_route') != 'home' % <div class='container is_top'> % endif %
            % block body % % endblock %
        % if app.request.get('_route') != 'home' % </div> % endif %
    </body>
</html>

Security.yaml 防火墙:

    firewalls:
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
            main:
                anonymous: true
                guard:
                    authenticators:
                        - App\Security\LoginFormAuthenticator
                logout:
                    path : logout
                remember_me:
                    secret: '%kernel.secret%'
                    lifetime: 2592000 #<- 30 days in seconds - defaults to one year if you take this out!

php bin/console debug:router | grep _profiler 上的结果:

  _profiler_home             ANY      ANY      ANY    /_profiler/                        
  _profiler_search           ANY      ANY      ANY    /_profiler/search                  
  _profiler_search_bar       ANY      ANY      ANY    /_profiler/search_bar              
  _profiler_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo                 
  _profiler_search_results   ANY      ANY      ANY    /_profiler/token/search/results  
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open                    
  _profiler                  ANY      ANY      ANY    /_profiler/token                 
  _profiler_router           ANY      ANY      ANY    /_profiler/token/router          
  _profiler_exception        ANY      ANY      ANY    /_profiler/token/exception       
  _profiler_exception_css    ANY      ANY      ANY    /_profiler/token/exception.css 

最后的主页控制器:

<?php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class HomepageController extends AbstractController

    /**
    * @Route("/", name="home")
    */

    public function output()
        return $this->render('homepage/home.html.twig',[
            'title' => 'yo',
        ]);
    


?>

添加了 public/index.php:

<?php

use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\HttpFoundation\Request;

require dirname(__DIR__).'/config/bootstrap.php';

if ($_SERVER['APP_DEBUG']) 
    umask(0000);

    Debug::enable();


if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) 
    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);


if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) 
    Request::setTrustedHosts([$trustedHosts]);


$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

【问题讨论】:

在您的浏览器中执行 ctrl-u 并验证您是否显示了一个 html 页面。该栏只会出现在实际页面中。 1.您可以检查浏览器的网络选项卡(ff 和 chrome 中的 F12),是否可能加载了一些 _profiler 路由? (如果是,它已加载但不可见)。 2. web profiler bundle 是否处于活动状态,运行bin/console debug:event-dispatcher kernel.response,其中-128 优先级应该是WebDebugToolbarListener::onKernelResponse。如果不是,请检查 config/bundles.php,它应该包含 WebProfilerBundle。是的。 @Majo0od 如果您发现第 102 行中的条件导致侦听器停止工作,您有什么尝试进一步解决这个问题?以下哪一个条件的计算结果为true 临时修改WebDebugToolbarListener.php。在第 109 行,在 return 语句之前添加:echo 'Mode: ', $this-&gt;mode, " XDebTok: ", $response-&gt;headers-&gt;has('X-Debug-Token'), " IsRedir: ", $response-&gt;isRedirection(); die(); 并报告其返回。 在“config/packages/dev/web_profiler.yaml”的顶部添加一些虚假字符串(例如“abc”),看看是否有错误。也许文件根本没有被读取。 【参考方案1】:

如果不是不可能的话,为您远程调试它是非常困难的。确切的问题与您本地设置中的特定问题有关,无法访问您的项目的人将没有机会确切地看到问题所在。

针对您的情况的一些一般和具体的故障排除建议:

第一。重新安装分析器包

虽然不寻常,但安装可能会失败。确保您的分析器包没问题。

先删除它(composer remove profiler),然后重新安装它:composer require --dev profiler)。

第二。检查配置

使用 Symfony 的控制台命令来验证您的配置。

首先是内置分析器:

$ bin/console debug:config framework profiler

应该返回如下内容:

Current configuration for "framework.profiler"
==============================================

only_exceptions: false
enabled: true
collect: true
only_master_requests: false
dsn: 'file:%kernel.cache_dir%/profiler'

然后是探查器工具栏:

$ bin/console debug:config web_profiler

应该返回如下内容:

Current configuration for extension with alias "web_profiler"
=============================================================

web_profiler:
    toolbar: true
    intercept_redirects: false
    excluded_ajax_paths: '^/((index|app(_[\w]+)?)\.php/)?_wdt'

第三。检查容器

检查 Profiler 服务将如何被实例化:

$ bin/console debug:container profiler --show-arguments

期待这样的事情:

Information for Service "profiler"
==================================

 Profiler.

 ---------------- -------------------------------------------------------------------------------------
  Option           Value
 ---------------- -------------------------------------------------------------------------------------
  Service ID       profiler
  Class            Symfony\Component\HttpKernel\Profiler\Profiler
  Tags             monolog.logger (channel: profiler)
                   kernel.reset (method: reset)
  Calls            add, add, add, add, add, add, add, add, add, add, add, add, add, add, add, add, add
  Public           yes
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
  Arguments        Service(profiler.storage)
                   Service(monolog.logger.profiler)
                   1
 ---------------- -------------------------------------------------------------------------------------

然后是 web_toolbar:

# bin/console debug:container web_profiler.debug_toolbar --show-arguments

对于这样的事情:

Information for Service "web_profiler.debug_toolbar"
====================================================

 WebDebugToolbarListener injects the Web Debug Toolbar.

 ---------------- ------------------------------------------------------------------------
  Option           Value
 ---------------- ------------------------------------------------------------------------
  Service ID       web_profiler.debug_toolbar
  Class            Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener
  Tags             kernel.event_subscriber
                   container.hot_path
  Public           no
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
  Arguments        Service(twig)

                   2
                   Service(router.default)
                   ^/((index|app(_[\w]+)?)\.php/)?_wdt
                   Service(web_profiler.csp.handler)
 ---------------- ------------------------------------------------------------------------

(注意2,它启用了工具栏)。

第四。检查事件调度程序。

kernel.response 事件期间注入Web 调试工具栏。检查回调是否正确挂钩:

$ bin/console debug:event-dispatcher kernel.response

这将返回如下内容:

Registered Listeners for "kernel.response" Event
================================================

 ------- -------------------------------------------------------------------------------------------- ----------
  Order   Callable                                                                                     Priority
 ------- -------------------------------------------------------------------------------------------- ----------
  #1      ApiPlatform\Core\Hydra\EventListener\AddLinkHeaderListener::onKernelResponse()               0
  #2      Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse()              0
  #3      Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelResponse()          0
  #4      Symfony\Component\WebLink\EventListener\AddLinkHeaderListener::onKernelResponse()            0
  #5      Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse()              0
  #6      ApiPlatform\Core\HttpCache\EventListener\AddHeadersListener::onKernelResponse()              -1
  #7      Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse()              -100
  #8      Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse()   -128
  #9      Symfony\Component\HttpKernel\EventListener\TestSessionListener::onKernelResponse()           -128
  #10     Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse()      -255
  #11     Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelResponse()               -1000
  #12     Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse()      -1024
 ------- -------------------------------------------------------------------------------------------- ----------

注意项目#7,它是Profiler 收集器(其中包括响应中的X-Debug-Token 标头,稍后将由Web 调试工具栏检查,即上面的项目#8上市。

如果上述任何一项检查失败

您必须专注于该特定部分以找出它失败的原因。也许其他一些捆绑干扰?某个配置文件有问题?

一切都检查完毕

...但仍然无法正常工作?嗯,这很奇怪。确保您返回的模板具有&lt;/body&gt; 标记,并且返回的响应具有text/html 内容类型。但如果上述所有检查都通过了......它应该工作。


您在评论中说framework.profiler.collect 在执行这些检查时设置为 false。

通过更改 config/packages/dev/web_profiler.yaml 将其设置为 true,如下所示:

framework:
    profiler:
        only_exceptions: false
        collect: true

【讨论】:

突出的是:debug:config framework profiler 返回collect: false 所以尝试添加framework.profiler.collect的配置,所以它会显示true 它还活着!!!最后!现在它又回来了!感谢大家的调试和帮助!!!! 谁知道单行就能搞砸一切。如果我没记错的话,从历史上看,我们不需要添加collect : true?这是新的吗? 感谢所有这些步骤!结果我创建了一个没有扩展基础的模板,所以实际上并没有返回 HTML/javascript,而只是返回纯文本。【参考方案2】:

我也有这个问题。我是 Sympfony 的新手,我不知道,如果在 apache 上运行,必须通过 composer 要求 .htaccess。只需这样做:

composer require symfony/apache-pack

是解决方案。

【讨论】:

一个多小时试图弄清楚为什么只有根 (/) 路由在我的本地环境中工作。这个作曲家需要为我做了诀窍。现在所有路线,包括 /_profiler/* 路线,都在工作。谢谢!【参考方案3】:

我在一个新的 Symfony 5.1 应用程序中遇到了类似的症状 - 即使项目处于调试模式,调试工具栏也没有显示在某些页面上。结果在这个应用程序中,我打算在每个页面的 twig 模板中添加 &lt;body&gt;&lt;/body&gt; 标签,而不是在基本模板中。但是对于一些页面(那些没有显示调试工具栏的页面),我忘记在页面模板中包含 &lt;body&gt;&lt;/body&gt; 标记,因此呈现的 HTML 没有 &lt;body&gt; 标记 - 因此调试工具栏不会显示。

【讨论】:

【参考方案4】:

尝试使用命令:

composer dump-env dev

【讨论】:

请在您的答案中添加一些解释,以便其他人可以从中学习。为什么这能解决问题?【参考方案5】:

我在这个问题上苦苦挣扎了很长时间,但遮阳篷实际上非常简单。您的模板必须包含&lt;body&gt; 标签才能显示工具栏。我只是在尝试 Symfony,并没有费心将它包含在我的 twig 文件中

【讨论】:

【参考方案6】:

通过http 访问您的本地站点时也可能发生这种情况,而不是 https,可以使工具栏请求失败。

【讨论】:

以上是关于我的分析器工具栏没有出现在 symfony 4.3.1 中的主要内容,如果未能解决你的问题,请参考以下文章

无法解析 symfony 4.3 中覆盖 FOS 控制器的参数 $token

为啥 Symfony 调试工具栏中的计时器(分析器)超过 100% 时间?

Symfony 4.3 学说迁移问题

如何禁用 Symfony 2 分析器栏?

谷歌和Facebook全球性大规模瘫痪!开发者成立了社区继续维护Atom IDE;QQ正式上线注销功能;Symfony 4.3

[Symfony 4.3] 创建一个站点维护模式